目录
第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=0){
if(numbers[cou-1]>numbers[cou]){
break;
}
cou--;
}
return numbers[cou];
}