zoukankan      html  css  js  c++  java
  • Add Binary

    Add Binary

    问题:

    Given two binary strings, return their sum (also a binary string).

    思路:

      归并排序收尾工作

    我的代码:

    public class Solution {
        public String addBinary(String a, String b) {
            if(a == null)   return b;
            if(b == null)   return a;
            String s = "";
            int plus = 0;
            int i = a.length() - 1;
            int j = b.length() - 1;
            for(; i >= 0 && j >= 0; i--,j--)
            {
                int one = (int)(a.charAt(i) - '0');
                int two = (int)(b.charAt(j) - '0');
                int sum = one + two + plus;
                if(sum >= 2)
                {
                    s = (sum - 2) + s;
                    plus = 1;
                }
                else
                {
                    s = sum + s;
                    plus = 0;
                }
            }
            while(i >= 0)
            {
                int one = (int)(a.charAt(i) - '0');
                int sum = one + plus;
                if(sum >= 2)
                {
                    s = (sum - 2) + s;
                    plus = 1;
                }
                else
                {
                    s = sum + s;
                    plus = 0;
                }
                i--;
            }
            while(j >= 0)
            {
                int two = (int)(b.charAt(j) - '0');
                int sum = two + plus;
                if(sum >= 2)
                {
                    s = (sum - 2) + s;
                    plus = 1;
                }
                else
                {
                    s = sum + s;
                    plus = 0;
                }
                j--;
            }
            return plus == 0 ? s : 1 + s; 
        }
    }
    View Code

    他人代码:

    public class Solution {
        public String addBinary(String a, String b) {
            if(a.length() < b.length()){
                String tmp = a;
                a = b;
                b = tmp;
            }
            
            int pa = a.length()-1;
            int pb = b.length()-1;
            int carries = 0;
            String rst = "";
            
            while(pb >= 0){
                int sum = (int)(a.charAt(pa) - '0') + (int)(b.charAt(pb) - '0') + carries;
                rst = String.valueOf(sum % 2) + rst;
                carries = sum / 2;
                pa --;
                pb --;
            }
            
            while(pa >= 0){
                int sum = (int)(a.charAt(pa) - '0') + carries;
                rst = String.valueOf(sum % 2) + rst;
                carries = sum / 2;
                pa --;
            }       
            
            if (carries == 1)
                rst = "1" + rst;
            return rst;
        }
    }
    View Code

    学习之处:

    • 他人代码里面用了两个循环就解决问题了,代码更加简洁,而我的代码里面用了三个循环,代码段太长了,需要精简
    • 进位的命名用carries更加专业一些
    • char c 类型的'0' 想转化成int 的0 int num = (int)(c - '0')
    • 这道题竟然花了好几遍才过
  • 相关阅读:
    动态规划 ------最短路径问题
    回溯算法 ------回溯算法的设计思想和适用条件
    回溯算法 ------ 回溯算法的设计思想及适用条件
    回溯算法 ------回溯算法的几个例子
    纯css实现翻书效果
    从vue源码看props
    js循环中使用async/await踩过的坑
    js实现word转换为html
    从vue源码看Vue.set()和this.$set()
    微信、qq二次分享
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4342169.html
Copyright © 2011-2022 走看看