力扣:66&&3

周算法总结
  • 66:
    在这里插入图片描述
    题目简单明确这里我总结两种方法。
  1. 代码:
int* plusOne(int* digits, int digitsSize, int* returnSize){
    for(int i=digitsSize-1;i>=0;i--)
    {
        if(digits[i]<9)
        {
            
            digits[i]++;
            *returnSize=digitsSize;
            return digits;
        }
        digits[i]=0;
    }
    int* result=(int*)malloc(sizeof(int)*(digitsSize+1));
    result[0]=1;
    for(int i=1;i<(digitsSize+1);i++)
        result[i]=0;
    *returnSize=digitsSize+1;
    return result;
}

思维方式:首先遍历整个数组,并且包含一个if判断,如果最后一位小于9的话,说明返回的数组只需要最后一位加一即可,所以,我们直接加1并返回,如果不小于9的话,我们将其变为0记为进位的一种方式,若每一次都如此说明数字由n个9组成,那么我们只需要重新申请一个比原先的数组大一个空间的数组,赋值为1~n个0即可。
2. 代码:

int* plusOne(int* digits, int digitsSize, int* returnSize){
    int i,n;
    int* a=(int*)malloc(sizeof(int)*digitsSize);
    for(i=digitsSize-1;i>=0&&digits[i]==9;i--);
   
    if(i>=0)
    {          
            *returnSize=digitsSize;
          for(n=digitsSize-1;n>i;n--)
                a[n]=0;
           digits[i]+=1;
           for(n=i;n>=0;n--)
                a[n]=digits[n]; 
    } 
    else
    {
        *returnSize=digitsSize+1;
        a=(int*)realloc(a,sizeof(int)*(digitsSize+1)); 
       for(n=digitsSize;n>0;n--)
                a[n]=0;
          a[n]=1;      
    }
    return a;
}

第二个思路是分情况考虑,我们知道这里分三种情况要么是n个9,组成,要么是有部分9要么是无9,因此我们设置i将其分为两种大情况,即全为9和不全为9,由i判断,之后分情况走即可。

  • 3:
    在这里插入图片描述
    这个题目与之前我写过的链表组件的思想大同小异,但是一旦走入误区就会很复杂。
    代码:
int lengthOfLongestSubstring(char * s){
	int i=0,max=0,count=0,start=0,flag[128]={0};
	while(s[i]!='\0'){
		if(flag[s[i]]>start){
			count=i-start;
			max=count>max?count:max;
			start=flag[s[i]];
		}
		flag[s[i]]=i+1;
		i++;
	}
	count=i-start;
	return count>max?count:max;
}

用一个start记录开始的点,用一个128个空间的数组去记录各个字符的位置及变化,同时要用到三目运算符计算最长长度。这里用128是因为,这里的字符包括各种各样的字符,我刚开始写的123报错了😂。这里的asc标准表最终是到127即delete的。这里没啥多说的,多看几遍自然就懂了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值