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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/4/19 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Plus One

原題鏈接Plus One

用數(shù)組表示一個(gè)整數(shù),返回這個(gè)整數(shù)加一后的數(shù)組

其實(shí)只要從后面開始找,直到找到第一個(gè)不為9的位置,將其值加一然后就可以返回了,之前的9都變?yōu)?。
因?yàn)楹竺娑际?,加一都變成0,然后向高位進(jìn)位,使高位加一,只要當(dāng)高位不是9時(shí)才會(huì)停止繼續(xù)向高位進(jìn)位,所以從后面開始找到第一個(gè)不為9的位置即可。
如果所有數(shù)字都是9,就說明需要增加一個(gè)高位1,比如999變?yōu)?000,但是數(shù)組只有3位,一種方法是在開頭插入一個(gè)數(shù)字1,但是這就需要移動(dòng)后面的元素了。仔細(xì)觀察發(fā)現(xiàn)后面的元素都是0,那么可以將第一個(gè)0變?yōu)?,然后在數(shù)組后面追加一個(gè)0即可,不需要移動(dòng)元素。

代碼如下

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;}/* 直到找到第一個(gè)不是9的,此時(shí)不再向高位進(jìn)位,加一返回 */else{++digits[i];return digits;}}/* 如果一直是9,那么digits將全變?yōu)?,此時(shí)需要在高位添加一個(gè)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

將兩個(gè)用字符串表示的二進(jìn)制數(shù)相加。
從低位開始相加,并考慮進(jìn)位,如果到達(dá)最高位時(shí)仍然有進(jìn)位,需要增加一位。
代碼如下

class Solution { public:string addBinary(string a, string b) {string res("");int a_idx = a.size() - 1;int b_idx = b.size() - 1;/* n可以既表示當(dāng)前值,也可以表示進(jìn)位,省去了單獨(dú)用一個(gè)變量記錄進(jìn)位的麻煩 */int n = 0;/* 進(jìn)位也可以放在while循環(huán)的條件中,省去了循環(huán)外面單獨(dú)判斷是否仍有進(jìn)位的麻煩 */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;} };

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。