66.加一

自己的方法
1.第一次提交错误,没有考虑到进位。
2.考虑到进位之后,对于把数组转化成向量又出现了问题。首先分情况没有分对 应该判断进位与digits第一位之和是否为10。是则先添加1 0 然后再添加数组中0~len-2个元素,共2+len-1=len+1个数;否则与digits[i]处理方式相同,把数组元素添加到result就行

class Solution 
{
public:
    vector<int> plusOne(vector<int>& digits) 
    {
        vector<int> result;
        int len;
        len = digits.size();
        int c = 1;
        int temp[len];
        fill(temp,temp+len,0);
        if(len == 1)
        {
            if(digits[len-1]<9)
            {
                result.push_back(digits[len-1]+1);
            }
            else
            {
                result.push_back(1);
                result.push_back(0);
            }
            
        }
        else
        {
        	//没有对digits[0]进行操作,所以下面再转化到result时需要分类对digits[0]处理。
            for(int i = len-1;i>0;i--)
            {
                temp[i] = (digits[i]+c)%10;
                c = (digits[i]+c)/10;
            }
            if(c+digits[0] == 10)
            {
            	//为10加一位
                result.push_back(1);
                result.push_back(0);
                for(int j = 0;j<len-1;j++)
                {
                    result.push_back(temp[j]);
                }
            }
            else//否则跟digits[i]处理一样
            {
                temp[0] = digits[0] + c;
                for(int j = 0;j<len;j++)
                {
                    result.push_back(temp[j]);
                }
            }

        }
        return result;
    }
};

别人的算法: vector不是不可以按下标添加元素吗???<C++ pirmer>P93
分为两种情况:

  1. 需要加位 当数为9 99 999等
  2. 不需要加位 当一个位置没有进位的时候,下一个位置一定不需要进位,可以直接返回;
    在这里插入图片描述
 vector<int> plusOne(vector<int>& digits) 
    {
        int len = digits.size();
        for (int i = len - 1; i >= 0; i--) 
        {
            digits[i]++;
            digits[i] %= 10;
            if (digits[i] != 0) 
            {
                return digits;
            }
        }
        vector<int> result(len + 1);
        result[0] = 1;
        return result;
    }

注意:digits[i] %= 10;不是求进位,而是看当前值是否需要进位,如果等与0则是有进位。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值