每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加
生活随笔
收集整理的這篇文章主要介紹了
每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Plus One
原題鏈接Plus One
用數組表示一個整數,返回這個整數加一后的數組
其實只要從后面開始找,直到找到第一個不為9的位置,將其值加一然后就可以返回了,之前的9都變為0。
因為后面都是9,加一都變成0,然后向高位進位,使高位加一,只要當高位不是9時才會停止繼續向高位進位,所以從后面開始找到第一個不為9的位置即可。
如果所有數字都是9,就說明需要增加一個高位1,比如999變為1000,但是數組只有3位,一種方法是在開頭插入一個數字1,但是這就需要移動后面的元素了。仔細觀察發現后面的元素都是0,那么可以將第一個0變為1,然后在數組后面追加一個0即可,不需要移動元素。
代碼如下
class Solution { public:vector<int> plusOne(vector<int>& digits) {if(digits.empty())return digits;for(int i = digits.size() - 1; i >= 0; --i){/* 如果一直是9,就一直變0 */if(digits[i] == 9){digits[i] = 0;}/* 直到找到第一個不是9的,此時不再向高位進位,加一返回 */else{++digits[i];return digits;}}/* 如果一直是9,那么digits將全變為0,此時需要在高位添加一個1 */digits[0] = 1;digits.push_back(0);return digits;} };Add Strings
原題鏈接Add Strings
直接從后往前加即可
代碼如下
Add Binary
原題鏈接Add Binary
將兩個用字符串表示的二進制數相加。
從低位開始相加,并考慮進位,如果到達最高位時仍然有進位,需要增加一位。
代碼如下
上述兩道題都是整數加法,不過都是用數組或者字符串表示的整數,需要一位一位求解。數組加一的題中找到第一個不為0的位置的技巧可以減少循環次數。二進制相加的題中將當前位相加的值和進位用一個變量表示,同時判斷是否有進位也放在循環中,省去了不少麻煩。
總結
以上是生活随笔為你收集整理的每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----计算从
- 下一篇: 每天一道LeetCode-----将单词