LeetCode 66[加一]

EricsT發表於2024-12-04

題目

連結

LeetCode 66[加一]

詳情

LeetCode 66[加一]

例項

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;
    }
};

相關文章