題目
連結
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;
}
};