阅读量:0
目录
【28题】
思路:
先用strstr查看是否存在匹配项,再用strncmp比较是否和匹配项相同并输出下标。
int strStr(char* haystack, char* needle) { char *p = strstr(haystack,needle); if(p==NULL) { return -1; } for (int i = 0; i < strlen(haystack); i++) { if(strncmp(needle,&haystack[i],strlen(needle))==0) { return i; } } return -1; }
【171题】
思路:
(1)根据ascll码表,遍历每一位减64,使A=1;B=2...
(2)如果len大于等于1,for循环求结果,第i位(这里指按自然数的第i位,例如ABC,A为第三位,C位第一位。)应该等于26的(i-1)次方乘以该位上的数字。最后相加求和输出结果。
代码:
int titleToNumber(char* columnTitle) { int len=strlen(columnTitle); for(int i = 0;i<len;i++) { columnTitle[i]-=64; } if(len>=1) { int sum = 0; int j=len-1; // j用来计算该位需要乘以多少个26. for(int i=0;i<len;i++) { sum+=columnTitle[i]*pow(26,j); j--; } return sum; } else { return -1; } return 0; }
当然也可以将第一步与第二步结合
int titleToNumber(char* columnTitle) { int len=strlen(columnTitle); if(len>=1) { int sum = 0; int j=len-1; for(int i=0;i<len;i++) { sum+=(columnTitle[i]-64)*pow(26,j); j--; } return sum; } else { return -1; } return 0; }
【283题,移动零】
思路:
(1)将不是0的数移到最前方,并计数
(2)将后面数赋值为0,输出结果
void moveZeroes(int* nums, int numsSize) { int right=0,left=0; int len=numsSize; while(numsSize--) { if(nums[left]==0) { left++; } else { nums[right]=nums[left]; right++; left++; } } for(int i=right;i<len;i++) { nums[i]=0; } for(int i=0;i<len;i++) { printf("%d\t",nums[i]); } }