• 67. Add Binary


    原题链接:https://leetcode.com/problems/add-binary/description/
    哎,直接看代码吧:

    /**
     * Created by clearbug on 2018/2/26.
     */
    public class Solution {
    
        public static void main(String[] args) {
            Solution s = new Solution();
            System.out.println(s.addBinary1("1", "11"));
            System.out.println(s.addBinary1("10", "11"));
            System.out.println(s.addBinary2("1", "11"));
            System.out.println(s.addBinary2("10", "11"));
        }
    
        /**
         * 我自己的解法,又他么是猪一样的思路。。。
         *
         * @param a
         * @param b
         * @return
         */
        public String addBinary1(String a, String b) {
            StringBuilder res = new StringBuilder("");
    
            char[] aChars = a.toCharArray();
            char[] bChars = b.toCharArray();
    
            boolean carry = false;
    
            int i = aChars.length - 1, j = bChars.length - 1;
            while (i >= 0 && j>= 0) {
                if (carry) {
                    if (aChars[i] == '1' && bChars[j] == '1') {
                        res.append('1');
                    } else if (aChars[i] == '0' && bChars[j] == '0') {
                        carry = false;
                        res.append('1');
                    } else {
                        res.append('0');
                    }
                } else {
                    if (aChars[i] == '1' && bChars[j] == '1') {
                        carry = true;
                        res.append('0');
                    } else if (aChars[i] == '0' && bChars[j] == '0') {
                        res.append('0');
                    } else {
                        res.append('1');
                    }
                }
                i--;
                j--;
            }
    
            if (i == -1) {
                while (j >= 0) {
                    if (carry) {
                        if (bChars[j] == '1') {
                            res.append('0');
                        } else {
                            carry = false;
                            res.append('1');
                        }
                    } else {
                        res.append(bChars[j]);
                    }
                    j--;
                }
            } else {
                while (i >= 0) {
                    if (carry) {
                        if (aChars[i] == '1') {
                            res.append('0');
                        } else {
                            carry = false;
                            res.append('1');
                        }
                    } else {
                        res.append(aChars[i]);
                    }
                    i--;
                }
            }
            if (carry) {
                res.append("1");
            }
    
            return res.reverse().toString();
        }
    
        /**
         * 官方讨论区别人的答案,确实是简洁优雅
         *
         * @param a
         * @param b
         * @return
         */
        public String addBinary2(String a, String b) {
            StringBuilder res = new StringBuilder("");
    
            int carry = 0;
            int i = a.length() - 1;
            int j = b.length() - 1;
    
            while (i >= 0 || j >= 0) {
                int sum = carry;
                if (i >= 0) {
                    sum += a.charAt(i--) - '0';
                }
                if (j >= 0) {
                    sum += b.charAt(j--) - '0';
                }
                carry = sum / 2;
                res.append(sum % 2);
            }
    
            if (carry != 0) {
                res.append(carry);
            }
            return res.reverse().toString();
        }
    
    }
    
  • 相关阅读:
    Android中传感器的基本概念
    Android攻城狮 multi-touch多点触摸
    Android攻城狮SurfaceView
    Android攻城狮Tab类型
    Android攻城狮使用SubMenu创建子菜单
    Android攻城狮认识ContextMenu
    Android攻城狮OptionsMenu
    Android攻城狮Notification实现状态通知栏
    虹软人脸识别SDK(java+linux/window)
    人脸识别ArcFace C#DEMO 开发应用全过程
  • 原文地址:https://www.cnblogs.com/optor/p/8576415.html
Copyright © 2020-2023  润新知