[leetcode]67. Add Binary
阿新 • • 發佈:2019-01-10
Solution 1
class Solution { public String addBinary(String a, String b) { int n=Math.max(a.length(),b.length()); int[] nums=new int[n+1]; //先把能對齊的部分加起來 int i=n, p=a.length()-1, q=b.length()-1; for(;p>=0&&q>=0;i--, p--, q--){ nums[i]=a.charAt(p)-'0'+(b.charAt(q)-'0'); } //然後多出來的直接賦值 if(p<0){ for(int k=q;k>=0;k--,i--){ nums[i]=b.charAt(k)-'0'; } } else{ for(int k=p;k>=0;k--,i--){ nums[i]=a.charAt(k)-'0'; } } //單獨處理進位,這裡nums0正好留出來,如果最高位需要進位的話 for(int j=n;j>=1;j--){ if(nums[j]>=2){ nums[j-1]+=1; nums[j]=nums[j]%2; } } //轉換成字串 String ans=""; for(int j=0;j<=n;j++){ if(j==0&&nums[j]==0)continue; ans+=String.valueOf(nums[j]); } return ans; } }
Solution 2:思路同我,別人的更加elegant的
public class Solution { public String addBinary(String a, String b) { StringBuilder sb = new StringBuilder(); int i = a.length() - 1, j = b.length() -1, 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(); } }