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