https://leetcode.cn/problems/zigzag-conversion/description/Z字形变换#include string.h #include stdlib.h char* convert(char* s, int numRows) { int len strlen(s); char* result malloc(len 1); if (numRows 1 || numRows len) { strcpy(result,s); return result; }; int cycle 2 * numRows - 2; int pos 0; for (int row 0; row numRows; row) { for (int i row; i len; i cycle) { result[pos] s[i]; if (row ! 0 row ! numRows - 1) { int diagonal i cycle - 2 * row; if (diagonal len) result[pos] s[diagonal]; }; }; }; result[pos] \0; return result; }https://leetcode.cn/problems/longest-palindromic-substring/最长回文子串解法1#include string.h #include stdbool.h char* longestPalindrome(char* s) { int resultHead 0; int maxLen 1; int sLen strlen(s); for (int i 0; i sLen; i) { if (sLen - i maxLen) break; int subStrStart i; for (int subStrEnd sLen - 1; subStrEnd subStrStart; subStrEnd--) { if (subStrEnd - subStrStart maxLen - 1) break; bool IsPalindrome true; int currStart subStrStart; int currEnd subStrEnd; while (currStart currEnd) { if (s[currStart] ! s[currEnd]) { IsPalindrome false; break; }; currStart; currEnd--; }; if (IsPalindrome true subStrEnd - subStrStart 1 maxLen) { resultHead subStrStart; maxLen subStrEnd - subStrStart 1; }; }; }; char* result malloc ((maxLen 1) * sizeof(char)); for (int i 0; i maxLen; i) { result[i] s[resultHead]; }; result[maxLen] \0; return result; }解法2#include string.h char* longestPalindrome(char* s) { float resultCentre 0; int maxOffset 0; int sLen strlen(s); for (float i 0.5; i sLen; i i 0.5) { if (sLen - i maxOffset) break; int j i - 0.5; int k i 1; int offset 0; while (j 0 k sLen) { if (s[j] ! s[k]) break; offset; j--; k; }; if (offset maxOffset || (offset maxOffset) ((int)i i)) { resultCentre i; maxOffset offset; }; }; int resultLen 1; int resultStart 0; if (maxOffset ! 0) { resultLen maxOffset * 2; if ((int)resultCentre resultCentre) resultLen; resultStart resultCentre 0.5 - maxOffset; }; char* result malloc ((resultLen 1)); for (int i 0; i resultLen; i) { result[i] s[resultStart]; }; result[resultLen] \0; return result; }两数相加#include stddef.h struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { struct ListNode* result malloc (sizeof(struct ListNode)); struct ListNode* curr result; struct ListNode* curr1 l1; struct ListNode* curr2 l2; int carry 0; while (curr1 ! NULL || curr2 ! NULL) { int sum 0; if (curr1 ! NULL){ sum curr1-val; curr1 curr1-next; }; if (curr2 ! NULL){ sum curr2-val; curr2 curr2-next; }; curr-val (sum carry) % 10; carry (sum carry) / 10; if (curr1 ! NULL || curr2 ! NULL) { curr-next malloc (sizeof(struct ListNode)); curr curr-next; }; }; if (carry 0) { curr-next malloc (sizeof(struct ListNode)); curr curr-next; curr-val carry; }; curr-next NULL; return result; }https://leetcode.cn/problems/longest-substring-without-repeating-characters/无重复字符的最长字串#include stdbool.h #define MAX_DISTINCT_CHARS 50 bool search(char target, int startPos, int endPos, char* s); int lengthOfLongestSubstring(char* s) { int result 0; for (int i 0; s[i] ! \0; i) { int maxLen 1; for (int j i 1; s[j] ! \0; j) { if (search(s[j], i, j - 1, s) false) { maxLen; } else { break; }; }; if (maxLen result) result maxLen; if (result MAX_DISTINCT_CHARS) break; }; return result; } bool search(char target, int startPos, int endPos, char* s) { for (int i startPos; i endPos; i) { if (s[i] target) return true; }; return false; }