日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加

發布時間:2024/4/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天一道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

直接從后往前加即可
代碼如下

class Solution { public:string addStrings(string num1, string num2) {string res("");int idx1 = num1.size() - 1;int idx2 = num2.size() - 1;int n = 0;while(idx1 >= 0 || idx2 >= 0 || n > 0){n += (idx1 >= 0) ? (num1[idx1--] - '0') : 0;n += (idx2 >= 0) ? (num2[idx2--] - '0') : 0;res = static_cast<char>(n % 10 + '0') + res;n /= 10;}return res;} };

Add Binary

原題鏈接Add Binary

將兩個用字符串表示的二進制數相加。
從低位開始相加,并考慮進位,如果到達最高位時仍然有進位,需要增加一位。
代碼如下

class Solution { public:string addBinary(string a, string b) {string res("");int a_idx = a.size() - 1;int b_idx = b.size() - 1;/* n可以既表示當前值,也可以表示進位,省去了單獨用一個變量記錄進位的麻煩 */int n = 0;/* 進位也可以放在while循環的條件中,省去了循環外面單獨判斷是否仍有進位的麻煩 */while(a_idx >= 0 || b_idx >= 0 || n > 0){n += (a_idx >= 0) ? a[a_idx--] - '0' : 0;n += (b_idx >= 0) ? b[b_idx--] - '0' : 0;res = static_cast<char>(n % 2 + '0') + res;n /= 2;}return res;} };

上述兩道題都是整數加法,不過都是用數組或者字符串表示的整數,需要一位一位求解。數組加一的題中找到第一個不為0的位置的技巧可以減少循環次數。二進制相加的題中將當前位相加的值和進位用一個變量表示,同時判斷是否有進位也放在循環中,省去了不少麻煩。

總結

以上是生活随笔為你收集整理的每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。