IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode-067-二进制求和 -> 正文阅读

[数据结构与算法]LeetCode-067-二进制求和

二进制求和

题目描述:给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/add-binary/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:分组处理

由于过长的字符串直接转成int值会报错,因为超出了int值的上线,所以采取分段处理的方式,从后往前,每30位相加,利用了Integer.parseInt(String, 2)方法将字符串二进制数转成10进制的int值,然后利用Integer.toBinaryString(int)方法将相加后的值再转成二进制字符串,然后把分段的字符串加起来,就是最后的结果。

做的过程中有几点要考虑:

  • 第一,每段相加时,考虑是否有进位,如果有进位,用addOne表示进位数,值为1,在下一分段相加时把addOne加上;

  • 第二,当每段相加的结果长度小于30位时,需要在前面补0,补到30位。

public class LeetCode_067 {
 ? ?public static String addBinary(String a, String b) {
 ? ? ? ?int addOne = 0;
 ? ? ? ?String result = "";
 ? ? ? ?while (a.length() > 30 || b.length() > 30) {
 ? ? ? ? ? ?String aStr;
 ? ? ? ? ? ?String bStr;
 ? ? ? ? ? ?if (a.length() > 30) {
 ? ? ? ? ? ? ? ?aStr = a.substring(a.length() - 30, a.length());
 ? ? ? ? ? ? ? ?a = a.substring(0, a.length() - 30);
 ? ? ? ? ?  } else {
 ? ? ? ? ? ? ? ?aStr = a;
 ? ? ? ? ? ? ? ?a = "0";
 ? ? ? ? ?  }
 ? ? ? ? ? ?if (b.length() > 30) {
 ? ? ? ? ? ? ? ?bStr = b.substring(b.length() - 30, b.length());
 ? ? ? ? ? ? ? ?b = b.substring(0, b.length() - 30);
 ? ? ? ? ?  } else {
 ? ? ? ? ? ? ? ?bStr = b;
 ? ? ? ? ? ? ? ?b = "0";
 ? ? ? ? ?  }
 ? ? ? ? ? ?String temp = Integer.toBinaryString(Integer.parseInt(aStr, 2) + Integer.parseInt(bStr, 2) + addOne);
 ? ? ? ? ? ?if (temp.length() > 30) {
 ? ? ? ? ? ? ? ?addOne = 1;
 ? ? ? ? ? ? ? ?temp = temp.substring(1, temp.length());
 ? ? ? ? ?  } else {
 ? ? ? ? ? ? ? ?if(temp.length() < 30) {
 ? ? ? ? ? ? ? ? ? ?int zeroCount = 30 - temp.length();
 ? ? ? ? ? ? ? ? ? ?for(int i = 0; i < zeroCount; i++) {
 ? ? ? ? ? ? ? ? ? ? ? ?temp = "0" + temp;
 ? ? ? ? ? ? ? ? ?  }
 ? ? ? ? ? ? ?  }
 ? ? ? ? ? ? ? ?addOne = 0;
 ? ? ? ? ?  }
 ? ? ? ? ? ?result = temp + result;
 ? ? ?  }
 ? ? ? ?return Integer.toBinaryString(Integer.parseInt(a, 2) + Integer.parseInt(b, 2) + addOne) + result;
 ?  }
?
 ? ?public static void main(String[] args) {
 ? ? ? ?String a = "1001101011011010000010111010100111001000100001111110011111001010100101111";
 ? ? ? ?String b = "111000011000010000001100001001010011000101000000001111101101000100000000100100001100010000111001000";
 ? ? ? ?System.out.println(addBinary(a, b));
 ?  }
}

【每日寄语】 天可补,海可填,南山可移。日月既往,不可复追。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-07 11:50:56  更:2021-07-07 11:51:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:54:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码