目录
第1题:只出现一次的数字
第2题:两数之和
第3题:Excel表列名称
第4题:数组中重复的数字
第5题:二维数组中的查找
第6题:替换空格
第7题:从头到尾打印链表
第8题:斐波拉契数列
第9题:青蛙跳台阶问题
第10题:旋转数组的最小数
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。
第1题:只出现一次的数字
试题要求如下:
回答(C语言):
//按位异或,相同的数异或为0,任何数与0异或为原数不变 int singleNumber(int* nums, int numsSize){ int a = 0; for(int i = 0;i < numsSize ;i++){ a ^= nums[i]; } return a; }
第2题:两数之和
试题要求如下:
回答(C语言):
/** * Note: The returned array must be malloced, assume caller calls free(). */ int* twoSum(int* nums, int numbersSize, int target, int* returnSize){ int *res = malloc(sizeof(int) * 2); *returnSize = 2; int i = 0; int j = numbersSize - 1; while(true){ if (nums[i] + nums[j] > target) { j--; } else if (nums[i] + nums[j] < target) { i++; } else{ res[0] = i+1; res[1] = j+1; break; } } return res; }
第3题:Excel表列名称
试题要求如下:
回答(C语言):
char * convertToTitle(int n){ int len = 0, tmp = n; while (tmp){ len++; tmp = (tmp - 1) / 26; } char *res = (char*)malloc(len + 1); tmp = n; res[len] = 0; while (len--){ res[len] = (tmp - 1) % 26 + 'A'; tmp = (tmp - 1) / 26; } return res; }
第4题:数组中重复的数字
试题要求如下:
回答(C语言):
int comp(const void *a, const void *b) { return *(int *)a < *(int *)b; //从小到大排序 } int findRepeatNumber(int* nums, int numsSize){ qsort(nums, numsSize, sizeof(int), comp); for (int i = 0; i < numsSize-1; i++) { if (nums[i] == nums[i+1]) return nums[i]; } return -1; }
第5题:二维数组中的查找
试题要求如下:
回答(C语言):
bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){ if(matrix==NULL || matrixSize==0 || matrixColSize[0]==NULL) return false; for(int i=0;i<matrixSize;i++){ for(int j=0;j<matrixColSize[0];j++){ if(matrix[i][j]==target) return true; } } return false; }
第6题:替换空格
试题要求如下:
回答(C语言):
char* replaceSpace(char* s){ int i=0,cou=0,len_s=strlen(s); while(i<len_s){ if(s[i]==' '){ cou++; } i++; } char* buf_str=(char*)malloc(sizeof(char)*(len_s+(cou*2)+1)); int j=0; i=0; while(i<len_s){ if(s[i]==' '){ buf_str[j++]='%'; buf_str[j++]='2'; buf_str[j]='0'; } else{ buf_str[j]=s[i]; } i++; j++; } buf_str[j]='\0'; return buf_str; }
第7题:从头到尾打印链表
试题要求如下:
回答(C语言):
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * Note: The returned array must be malloced, assume caller calls free(). */ int* reversePrint(struct ListNode* head, int* returnSize){ struct ListNode *p=head,*q=head; returnSize[0]=0; while(p!=NULL){ returnSize[0]++; p=p->next; } int *buf_data=(int *)malloc(sizeof(int)*(returnSize[0])); int len=returnSize[0]; while(q!=NULL){ buf_data[--len]=q->val; q=q->next; } return buf_data; }
第8题:斐波拉契数列
试题要求如下:
回答(C语言):
int fib(int n){ int a=0,b=1,c=0; if(n==0){ return a; } if(n==1){ return b; } for(int i=2;i<=n;i++){ c=a+b; if (c > 1000000007) c %= 1000000007; a=b; b=c; } return c; }
第9题:青蛙跳台阶问题
试题要求如下:
回答(C语言):
int numWays(int n){ int a=1,b=1,c=0; if(n==0){ return a; } if(n==1){ return b; } for(int i=2;i<=n;i++){ c=a+b; if (c > 1000000007) c %= 1000000007; a=b; b=c; } return c; }
第10题:旋转数组的最小数
试题要求如下:
回答(C语言):
int minArray(int* numbers, int numbersSize){ int cou=numbersSize-1; while(cou-1>=0){ if(numbers[cou-1]>numbers[cou]){ break; } cou--; } return numbers[cou]; }
文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树leetcode-动态规划22-括号生成806 人正在系统学习中