每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加
Plus One
原題鏈接Plus One
用數(shù)組表示一個整數(shù),返回這個整數(shù)加一后的數(shù)組
其實只要從后面開始找,直到找到第一個不為9的位置,將其值加一然后就可以返回了,之前的9都變?yōu)?。
因為后面都是9,加一都變成0,然后向高位進(jìn)位,使高位加一,只要當(dāng)高位不是9時才會停止繼續(xù)向高位進(jìn)位,所以從后面開始找到第一個不為9的位置即可。
如果所有數(shù)字都是9,就說明需要增加一個高位1,比如999變?yōu)?000,但是數(shù)組只有3位,一種方法是在開頭插入一個數(shù)字1,但是這就需要移動后面的元素了。仔細(xì)觀察發(fā)現(xiàn)后面的元素都是0,那么可以將第一個0變?yōu)?,然后在數(shù)組后面追加一個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的,此時不再向高位進(jìn)位,加一返回 */else{++digits[i];return digits;}}/* 如果一直是9,那么digits將全變?yōu)?,此時需要在高位添加一個1 */digits[0] = 1;digits.push_back(0);return digits;} };Add Strings
原題鏈接Add Strings
直接從后往前加即可
代碼如下
Add Binary
原題鏈接Add Binary
將兩個用字符串表示的二進(jìn)制數(shù)相加。
從低位開始相加,并考慮進(jìn)位,如果到達(dá)最高位時仍然有進(jìn)位,需要增加一位。
代碼如下
上述兩道題都是整數(shù)加法,不過都是用數(shù)組或者字符串表示的整數(shù),需要一位一位求解。數(shù)組加一的題中找到第一個不為0的位置的技巧可以減少循環(huán)次數(shù)。二進(jìn)制相加的題中將當(dāng)前位相加的值和進(jìn)位用一個變量表示,同時判斷是否有進(jìn)位也放在循環(huán)中,省去了不少麻煩。
總結(jié)
以上是生活随笔為你收集整理的每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----计算从
- 下一篇: 每天一道LeetCode-----将单词