題目:
給你兩個二進位制字串,返回它們的和(用二進位制表示)。
輸入為非空字串且只包含數字1
和0
。
示例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:
publicstring 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 else
}else
else
}i++;
}while (i else
}else
else
}i++;
}if (flag == 1)
return
sc.reverse().tostring();
}
可以優化一下,上面的**太麻煩了:
publicstring 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 補齊 定義乙個字...