1. 程式人生 > >LeetCode67 二進位制求和

LeetCode67 二進位制求和

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

輸入為非空字串且只包含數字 1 和 0

示例 1:

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

示例 2:

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




//章節 - 陣列和字串    
//三、字串簡介
//1.二進位制求和
/*
演算法思想:
    這是常見題,思想大致相同。用兩個指標分別指向a和b的末尾,然後每次取出一個字元,轉為數字,若無法取出字元則按0處理,然後定義進位carry,初始化為0,將三者加起來,對2取餘即為當前位的數字,對2取商即為當前進位的值,記得最後還要判斷下carry,如果為1的話,要在結果最前面加上一個1。
*/ //演算法實現: class Solution { public: string addBinary(string a, string b) { string res = ""; int m = a.size() - 1, n = b.size() - 1, carry = 0; while (m >= 0 || n >= 0) { int p = m >= 0 ? a[m--] - '0' : 0; int q = n >= 0 ? b[n--] - '0' : 0
; int sum = p + q + carry; res = to_string(sum % 2) + res; //注意把數字變成字串,用to_string() carry = sum / 2; } return carry == 1 ? "1" + res : res; } };