LeetCode67-二进制求和(很长的水题)

一眼就看出来肯定要溢出!

一次通过!而且是最优的方法

除了麻烦一点,没有太大的问题

主要是一次就能通过这么长的代码,我真的很强!

简洁是其次,代码最重要是易懂!

public String addBinary(String a, String b) {

            //反着存,到最后反转即可
            StringBuilder result = new StringBuilder();

            //不对0,长度不一样,那么是要从各自右边算起,而不是取一个值

            boolean flag = false;

            int i = a.length()-1;
            int j = b.length()-1;

            //先加长度相同的部分
            while(i>=0&&j>=0){

                if(a.charAt(i)==‘1‘){

                    if(b.charAt(j)==‘0‘){

                        if(flag){
                            result = result.append(‘0‘);
                        }else{
                            result = result.append(‘1‘);
                        }

                    }else {
                        if(flag){
                            result = result.append(‘1‘);
                        }else{
                            result = result.append(‘0‘);
                            flag=true;
                        }
                    }

                }else{

                    if(b.charAt(j)==‘0‘){

                        if(flag){
                            result =result.append(‘1‘);
                            flag=false;
                        }else{
                            result = result.append(‘0‘);
                        }

                    }else{

                        if(flag){
                            result =result.append(‘0‘);
                        }else{
                            result = result.append(‘1‘);
                        }

                    }

                }

                j--;
                i--;
            }

            //出来之后,看看谁还没加完
            if(i<0&&j<0){
                //不用管了,都ok了
            }else if (i>=0){
                //进位好烦
                while(i>=0){
                    if(a.charAt(i)==‘1‘){
                        if(flag){
                            result = result.append(‘0‘);
                        }else{
                            result = result.append(‘1‘);
                        }
                    }else{
                        if(flag){
                            result = result.append(‘1‘);
                            flag=false;
                        }else{
                            result = result.append(‘0‘);
                        }
                    }
                    i--;
                }
            }else{
                while(j>=0){
                    if(b.charAt(j)==‘1‘){
                        if(flag){
                            result = result.append(‘0‘);
                        }else{
                            result = result.append(‘1‘);
                        }
                    }else{
                        if(flag){
                            result = result.append(‘1‘);
                            flag=false;
                        }else{
                            result = result.append(‘0‘);
                        }
                    }
                    j--;
                }

            }

            //最后还有一个进位
            if(flag){
                result = result.append(1);
            }

            return result.reverse().toString();

    }

原文地址:https://www.cnblogs.com/weizhibin1996/p/9392267.html

时间: 2024-08-09 22:00:05

LeetCode67-二进制求和(很长的水题)的相关文章

LeetCode67 二进制求和

给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: "100" 示例 2: 输入: a = "1010", b = "1011" 输出: "10101" //章节 - 数组和字符串 //三.字符串简介 //1.二进制求和 /* 算法思想: 这是常见题,思想大致相同.用两个指针分别

【PAT-一道看着很难的水题】L2-023. 图着色问题

水题!没其他想说的,还以为可以搞点高大上的搜索呢!十五分钟,暴力两重循环就OK了! 代码如下: #include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #include<set> #include<vector> #include<map>

水题 Codeforces Round #299 (Div. 2) A. Tavas and Nafas

题目传送门 1 /* 2 很简单的水题,晚上累了,刷刷水题开心一下:) 3 */ 4 #include <bits/stdc++.h> 5 using namespace std; 6 7 char s1[11][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven

lintcode 容易题:Add Binary 二进制求和

题目: 二进制求和 给定两个二进制字符串,返回他们的和(用二进制表示). 样例 a = 11 b = 1 返回 100 解题: 和求两个链表的和很类似 考虑进位,考虑最后一项的进位 0+0 = 0 不需要进位 0+1 = 1 不需要进位 1+1 =0  进位 1 同时注意 低位进1,高位时1+1的情况,直接加就是3了,这个需要进位1 ,原位的结果也是1的情况 Java程序: public class Solution { /** * @param a a number * @param b a

【leetcode 简单】第十七题 二进制求和

实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842...,   由于返回类型是整数,小数部分将被舍去. #define PF(w) ((w)*(w)) int mySqrt(int x) { int start = 0; int end = x; double mid = 0; i

sdut 2841 Bit Problem (水题)

题目 贴这个题是因为看题解有更简单的方法, 我做的时候是直接算的, 也很简单. 贴一下题解吧: 如果一个整数不等于 0,那么该整数的二进制表示中至少有一位是 1. 这个题结果可以直接输出 x - (x&(x-1)); 因为x-1 之后二进制下,就是最右边的1变成了0, 最右边的1的 右边所有的0变成了1, 不影响最左边. 我的代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4

Acdream 1111:LSS(水题,字符串处理)

LSS Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 128000/64000 KB (Java/Others) SubmitStatistic Next Problem Problem Description Time flies, four years passed, colleage is over. When I am about to leave, a xuemei ask me an ACM  problem, but

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

CF#FF(255)-div1-C【水题,枚举】

[吐槽]:本来没打算写这题的题解的,但惨不忍睹得WA了13次,想想还是记录一下吧.自己的“分类讨论能力”本来就很差. 刚开始第一眼扫过去以为是LIS,然后忽略了复杂度,果断TLE了,说起来也好惭愧,也说明有时候太懒得动脑了,总是习惯利用惯性思维,这不是一件好事. [题意]:给你大小为n的整型数组a[n],求这数组的一个子串,其中最多可以修改子串中的一个数字,使得到的子串是最长的严格递增的子串,输出该子串的长度 L. [思路]:O(n)复杂度,枚举断点情况.第0个和第n个位置默认为断点.(用ve[