• leetcode-67-二进制求和


    问题:

    package com.example.demo;
    
    public class Test67 {
    
        /**
         * 二进制求和
         * 思路:
         * 1、先获取两个二进制字符串的长度,用于补齐为等长字符串,便于两两相加
         * 2、定义一个overFlow来表名两两相加是否已经满足进1
         * 3、定义循环,总字符串的最后开始计算(也就是低位开始计算)
         * 4、将overFlow+ a1 + b1 - 0   --->这个值代表运算出的结果
         * 5、将运算出的结果和‘1‘ 和 ’3‘ 比较(因为二进制相加只有四种情况,这两种情况是需要进位的)
         * '0' + '0'  -->  '0'
         * '1' + '0'  -->  '1'
         * '1' + '1'  -->  '2'
         * '1' + '1' + overFlow  -->  '3'
         * 6、使用stringbuffer保存每一次运算后的结果
         * 7、循环完成之后,需要判断最后一次运算是否满足进位,满足的话,需要单独处理
         * 8、最后reverse翻转字符串即为结果
         */
        public String addBinary(String a, String b) {
            StringBuffer sb = new StringBuffer();
            int len1 = a.length();
            int len2 = b.length();
    
            // 向将两个字符串补齐
            while (len1 < len2) {
                a = '0' + a;
                len1++;
            }
    
            while (len2 < len1) {
                b = '0' + b;
                len2++;
            }
    
    
            int overFlow = 0;
            int index = a.length() - 1;
            // 从低位两两相加,并计算最终的二进制值,append到stringbuffer中
            while (index >= 0) {
                char c = a.charAt(index);
                char c1 = b.charAt(index);
                int sum = c + c1 - '0' + overFlow;
                if (sum >= '2') {
                    overFlow = 1;
                } else {
                    overFlow = 0;
                }
                sb.append((sum == '1' || sum == '3') ? '1' : '0');
                index--;
            }
            // 循环完成之后,需要判断最后一次运算是否满足进位,满足的话,需要单独处理
            if (overFlow == 1) {
                sb.append('1');
            }
            return sb.reverse().toString();
        }
    
        public static void main(String[] args) {
    
            Test67 t = new Test67();
            String s = t.addBinary("11", "");
            System.out.println(s);
        }
    }
  • 相关阅读:
    C# 调用Java Webservice 加入SoapHeader 验证信息
    SqlServer查找表中多余的重复记录
    INI文件的读写
    Sql触发器脚本
    Sql遍历更新脚本
    CAS 单点登录,通过ticket 获取登录用户
    模块 | 验证格式
    aja如何解决跨域请求?
    说说各个浏览器box模型
    Vue 双向数据绑定原理分析
  • 原文地址:https://www.cnblogs.com/nxzblogs/p/11347537.html
Copyright © 2020-2023  润新知