zoukankan      html  css  js  c++  java
  • leetcode67

    Given two binary strings, return their sum (also a binary string).
    The input strings are both non-empty and contains only characters 1 or 0.
    Example 1:
    Input: a = "11", b = "1"
    Output: "100"
    Example 2:
    Input: a = "1010", b = "1011"
    Output: "10101"
     
    双指针。
    乘法的简单版。从后往前扫描原数字。组合carry符。不断算出当前位置的数字拼到sb上面,最后返回sb.reverse().toString();
     
    细节:
    1.计算完最后两个数字加和的结果,可能还会有一位进位留在carry里就退出循环了,如果carry里有东西要额外做一步加上去。
    2.要从原始数字的后面往前扫描,先从个位开始。
    3.while循环的末尾要动指针啊啊啊! 
     
    实现:
    class Solution {
        public String addBinary(String a, String b) {
            int carry = 0;
            StringBuilder sb = new StringBuilder();
            // P2:要从数字的后面往前计算
            int i = a.length() - 1, j = b.length() - 1;
            while (i >= 0 || j >= 0) {
                int ca = i >= 0 ? a.charAt(i--) - '0' : 0;
                int cb = j >= 0 ? b.charAt(j--) - '0' : 0;
                sb.append((ca + cb + carry) % 2);
                carry = (ca + cb + carry) / 2;
            // P3: 你又忘了在while循环末尾变动指针了哦猪!!
            }
            // P1: 最后一个carry也要加上去
            if (carry != 0) {
                sb.append(carry);
            }
            return sb.reverse().toString();
        }
    }
  • 相关阅读:
    shell去重
    JDBC源码解析
    try catch finally
    URL
    域名与IP地址的联系与区别
    C++stack
    C++vector
    单链表常见面试题(C语言实现)
    数据库limit子句
    strcpy和memcpy的区别
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/9704533.html
Copyright © 2011-2022 走看看