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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

add binary java_LeetCode算法题-Add Binary(Java实现)

發(fā)布時間:2025/4/16 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 add binary java_LeetCode算法题-Add Binary(Java实现) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這是悅樂書的第157次更新,第159篇原創(chuàng)

01 看題和準(zhǔn)備

今天介紹的是LeetCode算法題中Easy級別的第16題(順位題號是67)。給定兩個二進(jìn)制字符串,返回它們的總和(也是二進(jìn)制字符串)。輸入字符串都是非空的,只包含字符1或0。 例如:

輸入:a =“11”,b =“1”

輸出:“100”

輸入:a =“1010”,b =“1011”

輸出:“10101”

本次解題使用的開發(fā)工具是eclipse,jdk使用的版本是1.8,環(huán)境是win7 64位系統(tǒng),使用Java語言編寫和測試。

02 第一種解法

二進(jìn)制數(shù)做加法時,是逢二進(jìn)一,因為最后返回的是二進(jìn)制字符串,所以可以不考慮溢出的風(fēng)險。

先來運(yùn)算一組簡單的數(shù)據(jù),使用提供的字符串“11”和“1”來演示。

“11”的最后一位是1,“1”的最后一位是1,兩者相加等于2,此時兩者的和的二進(jìn)制字符串表示為“12”。因為逢二進(jìn)一,所以最后一位變?yōu)?,向前進(jìn)1,變成了“20”。同理,繼續(xù)向前進(jìn)1,此時二進(jìn)制字符串變?yōu)榱恕?00”,也就是我們最后要的結(jié)果。

依據(jù)上面的計算過程,我們可以分以下幾個步驟來解題。

第一步,確定兩個字符串長度中的最大值。因為要從后往前依次獲取數(shù)字,循環(huán)的次數(shù)限制要以長度大的為準(zhǔn),長度小的默認(rèn)是用0替代。定義一個變量carry存儲上一次計算可能會遺留的值。創(chuàng)建一個StringBuilder對象,存儲每次計算后要插入的字符串。

第二步,定義一個變量sum存儲每次獲得的數(shù)的和,初始值指向carry。分別獲取兩個字符串最后一位字符的整數(shù),然后求和,對求得的和用2取余,然后將取余結(jié)果(0和1中的一個)插入第0個位置。

第三步,計算sum除以2的值,將其賦值給carry,接著循環(huán)第二步。

第四步,循環(huán)結(jié)束后,需要判斷下carry是否等于0,因為carry最后一個計算sum/2得到的值有可能不等于0,如果不等于0,則將carry的值插入字符串第0個位置。

public String addBinary(String a, String b) {

int m = a.length();

int n = b.length();

int len = Math.max(m, n);

int carry = 0;

StringBuilder sb = new StringBuilder();

for (int i=0; i

int sum = carry;

int num = 0;

if (m-1-i >= 0) {

num = a.charAt(m-1-i)-'0';

}

int num2 = 0;

if (n-1-i >= 0) {

num2 = b.charAt(n-1-i)-'0';

}

sum += num + num2;

sb.insert(0, sum%2+"");

carry = sum/2;

}

if (carry != 0) {

sb.insert(0, carry+"");

}

return sb.toString();

}

03 第二種解法

對于第一種解法,可以適當(dāng)再優(yōu)化下,大體邏輯一致,不過在使用StringBuilder存儲字符串的時候,使用的append方法,所以最后需要將其反轉(zhuǎn),才是最終我們需要的結(jié)果。

public String addBinary2(String a, String b) {

StringBuilder sb = new StringBuilder();

int i = a.length() - 1;

int j = b.length() -1;

int carry = 0;

while (i >= 0 || j >= 0) {

int sum = carry;

if (j >= 0) {

sum += b.charAt(j--) - '0';

}

if (i >= 0) {

sum += a.charAt(i--) - '0';

}

sb.append(sum % 2);

carry = sum / 2;

}

if (carry != 0) {

sb.append(carry);

}

return sb.reverse().toString();

}

04 小結(jié)

以上就是全部內(nèi)容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點(diǎn)贊、留言、轉(zhuǎn)發(fā)就是對我最大的回報和支持!

總結(jié)

以上是生活随笔為你收集整理的add binary java_LeetCode算法题-Add Binary(Java实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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