当前位置: 首页 > article >正文

线性表 力扣67. 二进制求和

题目 67. 二进制求和

翻译

主要思路

核心思路是像竖式计算一样,不过需要将字符串a和b反转后逐位进行二进制计算得到字符串c,最后再将c反转就是答案

逐位计算的时候利用count,在将a和b当前位置数字相加后通过模2来决定字符串c对应位置的数字

count /= 2,是清除了当前的进位,同时保留了下一位的进位

最后如果count不为0,说明字符串c还要进一位

第一次写错误

代码

class Solution {
public:
    string addBinary(string a, string b) {
        string ansString;   
        int scanlLength = max(a.size(), b.size());    //需要扫描的长度取两个字符串中最大值
        reverse(a.begin(), a.end());    //翻转两个字符串
        reverse(b.begin(), b.end());
        int count = 0;  //count表示是否进位
        for(int i = 0; i < scanlLength; i++) {
            count += i < a.length() ? (a.at(i) == '1') : 0;  //count 上递增,如果i还小于字符串a的长度,看字符串a当前位置是不是1,如果是1,a.at(i) == '1'返回1,则count递增1,否则递增0,下面一条语句同理 
            count += i < b.length() ? (b.at(i) == '1') : 0;
            ansString.push_back((count % 2) ? '1' : '0');   //count表示当前位计算结果,如果count % 2 == 0,说明要么计算结果是0,不用进位,当前位就是0,要么计算结果是2,如果是1,要么计算结果是3,要进位;进位后是1,要么计算结果是1,不用进位
            count /= 2;     //保留了下一位的进位
        }
        if(count) { //如果count不为0,表示还要往下进一位
            ansString.push_back('1');
        }
        reverse(ansString.begin(), ansString.end());
        return ansString;
    }
};

http://www.kler.cn/news/155464.html

相关文章:

  • 三、Zookeeper数据模型
  • 价值投资选股的方法
  • synchronized的实现原理
  • Docker常用进本命令【必备基本功】
  • nodejs基于vue的社区物业缴费报修管理系统7vwc6
  • fasterxml 注解组装实体
  • 【车载开发系列】Flash支持的安全功能
  • C语言面试之旅:掌握基础,探索深度(面试实战之c语言指针数组下篇)
  • 2023年【G1工业锅炉司炉】考试试题及G1工业锅炉司炉模拟考试题库
  • 第八天:信息打点-系统端口CDN负载均衡防火墙
  • STM32踩坑--串口发送乱码
  • 什么是Ros(三)- 常用工具简介
  • 【Erlang进阶学习】2、匿名函数
  • 使用OssImport 工具将文件上传到阿里云OSS
  • 最大乘积分解(动态规划)
  • QNX时钟调研
  • 华容道求解可视化工具
  • QT 中使用 QTableView 和 QStandardItemModel 实现将数据导出到Excel 和 从Excel导入到 QTableView 的功能
  • 怎么检测电脑电源?电脑电源检测系统软件如何助力?
  • 文案二次创作软件,文案二次创作的软件
  • 【Python】tensorflow学习的个人纪录(3)
  • 力扣每日一题day26[42. 接雨水]
  • 游泳馆会员服务预约管理系统预约小程序效果如何
  • TypeScript 的安装与使用
  • python每日一题——21搜索二维矩阵
  • JVM——内存溢出和内存泄漏
  • 【知识】稀疏矩阵是否比密集矩阵更高效?
  • python动态圣诞下雪图
  • vue-历史模式部署
  • 【面试HOT200】回溯篇