【力扣C语言】每日一题

avatar
作者
猴君
阅读量:0

目录

【28题】

思路:

【171题】

思路:

【283题,移动零】

思路:


【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]);     } }

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!