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

06.05

1.二进制求和
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
在这里插入图片描述
考虑一个最朴素的方法:先将 aaa 和 bbb 转化成十进制数,求和后再转化为二进制数。利用 Python 和 Java 自带的高精度运算,我们可以很简单地写出这个程序:

class Solution {public String addBinary(String a, String b) {return Integer.toBinaryString(Integer.parseInt(a, 2) + Integer.parseInt(b, 2));}
}

但是会报错在这里插入图片描述
在 Java 中:
如果字符串超过 333333 位,不能转化为 Integer
如果字符串超过 656565 位,不能转化为 Long
如果字符串超过 500000001500000001500000001 位,不能转化为 BigInteger
因此,为了适用于长度较大的字符串计算,我们应该使用更加健壮的算法。
Integer.parseInt(1010, 2):表示输出2进制数1010在10进制下的数。
toBinaryString的方法,作用是:以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式(类似还有toHexSrting()方法和toOctalString()方法)。

解题思路
整体思路是将两个字符串较短的用 000 补齐,使得两个字符串长度一致,然后从末尾进行遍历计算,得到最终结果。

本题解中大致思路与上述一致,但由于字符串操作原因,不确定最后的结果是否会多出一位进位,所以会有 2 种处理方式:

第一种,在进行计算时直接拼接字符串,会得到一个反向字符,需要最后再进行翻转
第二种,按照位置给结果字符赋值,最后如果有进位,则在前方进行字符串拼接添加进位
时间复杂度:O(n)O(n)O(n)

class Solution {public String addBinary(String a, String b) {StringBuffer ans = new StringBuffer();//StringBuffer线程安全int ca = 0;//表示进位for(int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--,j--){int sum = ca;sum += i >= 0 ? a.charAt(i) - '0' : 0;sum += j >= 0 ? b.charAt(j) - '0' : 0;//'0'的ascll码是48,一个字符转换对应的值,就要减去'0'ans.append(sum % 2);//StringBuffer的append()方法是拼接ca = sum / 2;}ans.append(ca == 1 ? ca : "");return ans.reverse().toString();//reverse()表示反转}
}
http://www.lryc.cn/news/92250.html

相关文章:

  • 【虹科案例】虹科数字化仪在激光雷达大气研究中的应用
  • Java抽象类介绍
  • 适配器模式的运用
  • 2023/6/8总结
  • AIGC大模型之——以文生图介绍
  • kali学习笔记(二)
  • avx指令集判断的坑
  • 求内推,求明主!
  • 第十三章:约束
  • M.2 SSD接口详解
  • 在本地Windows 11 系统的桌面版Docker上搭建PlantUML
  • mysql的sql_mode模式
  • chatgpt赋能python:Python编程必备之OpenCV库下载与安装
  • sparkSQL的使用
  • gitignore的语法
  • 长袋除尘器
  • HTML+CSS实训——Day02——仿一个网易云音乐的登陆界面
  • css蓝桥杯--电影院排座位
  • c++学习——多态
  • Java SPI机制及原理详解
  • 不压缩打包layui
  • 过去、现在及未来
  • leetcode701. 二叉搜索树中的插入操作(java)
  • Docker的容器管理操作
  • 计算机组成原理——中央处理器
  • tidb变更大小写敏感问题的总结
  • 法规标准-UN R158标准解读
  • 160个CrackMe之002
  • 3. 响应状态码及Response对象的status_code属性
  • MIME 类型列表 03