LeetCode 66[加一]

题目

链接

LeetCode 66[加一]

详情

实例

提示

题解

思路

错误思路

将数组转换为数字,然后进行+1运算

最后在力扣上提交,就成功的出错了,出错详情详见:https://leetcode.cn/problems/plus-one/submissions/584829592

数组有长度啊,长度是可以达到100的啊,哪里有这么大的类型存储嘞!!!

通过的思路

数组从首位开始是数字的最高位,则数字的最低位为数组末位

进行加1运算是从数字的低位开始进行的,所以就由数组末位开始遍历数字,进行加一运算

若运算结果超过10,则进行进位运算,就要到前一位去运算了

若运算结果没有超过10,则无需进行进位运算,就可以停止遍历了

然后将操作完的数组返回就可以了

需要注意的是,如果持续进位,直到数组的首位加1仍然是要进位的话,就需要在数组首部加上一个元素,为进位值,例如:[9, 9],则加1后变成[0, 0],还需在首部加上进位值1,即输出[1, 0, 0]

代码

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        
        int iSize = digits.size();
        int iCnt = 1;
        
        for (int i = iSize - 1; i > 0; i--)
        {
            int iCount = digits.at(i) + iCnt;
            
            iCnt = iCount / 10;
            digits[i] = iCount % 10;
            
            if (0 == iCnt)
                return digits;
        }
        int iCount = digits.at(0) + iCnt;
        
        digits[0] = iCount % 10;
        iCnt = iCount / 10;
        
        if (0 != iCnt)                              
            digits.insert(digits.begin(), iCnt);
        
        return digits;
    }
};

 

posted @ 2024-12-04 16:57  EricsT  阅读(10)  评论(0编辑  收藏  举报