zoukankan      html  css  js  c++  java
  • leetcode 67. 二进制求和

    这道题目和十进制题目很类似,但是在做的时候发现对string的用法不熟悉,首先是reverse,这个是对vector和string都起作用的std 函数,可以将对象反序,其次是在string中增加元素,使用的是push_back(),在写的时候对string取元素的方法也是印象模糊,后面尽量写一篇对string用法的文章增加记忆;

    刚开始是想转换成int类型后计算,但是发现很繁琐,还是用字符吧,给出了一个笨办法:

    class Solution {
    public:
        string addBinary(string a, string b) {
            if (a.length() == 0) {
                return b;
            }
            if (b.length() == 0) {
                return b;
            }
            reverse(a.begin(),a.end());
            reverse(b.begin(),b.end());
    
            char carry = '0';
    
            int a_index = 0;
            int b_index = 0;
            string result;
            while (a_index < a.length() || b_index < b.length()) {
                if (a_index < a.length() && b_index < b.length()) {
                    if (a[a_index] == '1' && b[b_index] == '1') {
                        if (carry == '1') {
                            result.push_back('1');
                        }
                        else {
                            result.push_back('0');
                            carry = '1';
                        }
                    }
                    else if (a[a_index] == '0' && b[b_index] == '0') {
                        if (carry == '1') {
                            result.push_back('1');
                            carry = '0';
                        }
                        else {
                            result.push_back('0');
                        } 
                    }
                    else {
                        if (carry == '1') {
                            result.push_back('0');
                        }
                        else {
                            result.push_back('1');
                        }
                        
                    }
                }
                else {
                    if (a_index == a.length()) {
                        if (carry == '1') {
                            if (b[b_index] == '1') {
                                result.push_back('0');
                            }
                            else {
                                result.push_back('1');
                                carry = '0';
                            }
                        }
                        else {
                            result.push_back(b[b_index]);
                        }
                        
                    }
                    else if (b_index == b.length()){
                        if (carry == '1') {
                            if (a[a_index] == '1') {
                                result.push_back('0');
                            }
                            else {
                                result.push_back('1');
                                carry = '0';
                            }
                        }
                        else {
                            result.push_back(a[a_index]);
                        }
                    }
                }
    
                if (a_index < a.length()) {
                    a_index++;
                }
                if (b_index < b.length()) {
                    b_index++;
                }
                
            }
    
            if (carry == '1') {
                result.push_back('1');
            }
    
            reverse(result.begin(), result.end());
            return result;
           
        }
    };
    

     后续我再增加新的解法

  • 相关阅读:
    c#对XML读取
    WPF--TypeConverter使用
    WPF---对于没有Command属性的添加以下代码可以达到有Command效果
    自定义事件、属性、方法
    读取Excel文件
    ClickOnce安装部署,手动。
    Logger 日志记录
    Maven
    等待与通知范式
    线程状态及基本方法
  • 原文地址:https://www.cnblogs.com/rulin/p/13185601.html
Copyright © 2011-2022 走看看