二進位制求和(力扣第67題)

2021-10-06 19:40:35 字數 1497 閱讀 6330

題目:

給你兩個二進位制字串,返回它們的和(用二進位制表示)。

輸入為非空字串且只包含數字10

示例1:

輸入: a = "11", b = "1"

輸出: "100"

示例2:

輸入: a = "1010", b = "1011"

輸出: "10101"

分析:

其實就是兩個二進位制數的加法運算,兩個二進位制數相加,首先設定乙個進製識別符號flag,初始值設定0。從低位到高位開始相加:

1、對應位置相加,然後再加上flag,三者之和設定為temp_sum,然後結果值的當前位為temp_sum%2,flag = temp_sum/2

2、進行遍歷二進位制字串的時候,因為需要從低位開始運算,而二進位制數的低位之於字串對應的位置,是字串的索引高位,所以解決方法就有兩個:

(1)設定兩個游標變數,初始值為a、b兩個字串的長度減去1,然後開始遍歷,沒完成一次,游標變數就自減運算一次

(2)將兩個二進位制數字串逆置一下,然後索引低位就和二進位制低位對應上了,最後再將結果倒置一下就可以了

3、遍歷進行的條件是,a的游標變數的值要在0-a.length這個範圍內或者b的游標變數的值要在0-b.length這個範圍內或者flag==1

實現**1:

public string addbinary(string a, string b) else 

flag = 1;

}else if (sa.charat(i) == '1' || sb.charat(i) == '1')else

}else else

flag = 0;

}i++;

}while (i < sa.length())else

}elseelse

}i++;

}while (i < sb.length())else

}elseelse

}i++;

}if (flag == 1)

return sc.reverse().tostring();

}

可以優化一下,上面的**太麻煩了:

public string addbinary(string a, string b) 

if (j >= 0 && b.charat(j--) == '1')

carry /= 2;

}return str.reverse().tostring();

}

這段**參考自大神cyc2018。

二進位制求和(力扣第67題)

題目 給你兩個二進位制字串,返回它們的和 用二進位制表示 輸入為非空字串且只包含數字1和0。示例1 輸入 a 11 b 1 輸出 100 示例2 輸入 a 1010 b 1011 輸出 10101 分析 其實就是兩個二進位制數的加法運算,兩個二進位制數相加,首先設定乙個進製識別符號flag,初始值設...

力扣題解 67 二進位制求和

67.二進位制求和 給你兩個二進位制字串,返回它們的和 用二進位制表示 輸入為非空字串且只包含數字1和0。示例 1 輸入 a 11 b 1 輸出 100 示例 2 輸入 a 1010 b 1011 輸出 10101 解題方案 思路整體思路是將兩個字串較短的用 000 補齊,使得兩個字串長度一致,然後...

力扣 二進位制求和

給定兩個二進位制字串,返回他們的和 用二進位制表示 輸入為非空字串且只包含數字 1 和 0。示例 1 輸入 a 11 b 1 輸出 100 示例 2 輸入 a 1010 b 1011 輸出 10101 首先判斷兩個字串的長度,找到最長的那個,將兩個字串反轉,再將短的那乙個用字元 0 補齊 定義乙個字...