67.Add Binary

題目連接:https://leetcode.com/problems/add-binary/description/html

題目大意:給出兩個二進制數,輸出其相加結果,結果仍用二進制表示。ide

法一:直接模擬大數加法,(http://www.cnblogs.com/cing/p/7747957.html這個題也是模擬大數加法),將二進制改成十進制便可,細節之處在於string和char[]的轉換以及string.trim()的使用,代碼以下(耗時6ms):spa

 1     public String addBinary(String a, String b) {
 2         char[] tmpa = a.toCharArray();
 3         char[] tmpb = b.toCharArray();
 4         int lengtha = tmpa.length;
 5         int lengthb = tmpb.length;
 6         int length = lengtha > lengthb ? lengtha : lengthb;
 7         char[] res = new char[length + 1];
 8         int flag = 0, num, t = 0, i, j;
 9         for(i = lengtha - 1, j = lengthb - 1;i >= 0 && j >= 0; i--, j--) {
10             num = flag + (tmpa[i] - '0') + (tmpb[j] - '0');
11             flag = num / 2;
12             res[t++] = (char) ((num % 2) + '0');
13         }
14         while(i >= 0) {
15             num = flag + (tmpa[i] - '0');
16             flag = num / 2;
17             res[t++] = (char) ((num % 2) + '0');
18             i--;
19         }
20         while(j >= 0) {
21             num = flag + (tmpb[j] - '0');
22             flag = num / 2;
23             res[t++] = (char) ((num % 2) + '0');
24             j--;
25         }
26         while(flag != 0) {
27             res[t++] = (char) ((flag % 2) + '0');
28             flag = flag / 2;
29         }
30         for(int k = 0; k < t / 2; k++) {
31             char tmp = res[k];
32             res[k] = res[t - k - 1];
33             res[t - k - 1] = tmp;
34         }
35         String s = "";
36         for(char ch : res) {
37             s += ch;
38         }
39         return s.trim();
40     }
View Code

法二(借鑑):與法一思想相同,只是這個代碼更簡潔,不用轉換string和char[]便可計算,https://leetcode.com/problems/add-binary/discuss/code

相關文章
相關標籤/搜索