【JAVA】【刷题子】67.二进制求和

334 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

一、题目与题目分析

题目

  给你两个二进制字符串,返回它们的和(用二进制表示)。
  输入为 非空 字符串且只包含数字 1 和 0示例.png
  (题目来源:力扣:67.二进制求和

题目分析

  二进制就是只有0和1的组成来表示的数,现在是需要计算字符串形式的二进制。(这里需要注意是字符串计算,同时int、long类型都会有问题的,在整体逻辑会说。)

二、整体逻辑与主要代码

题目分析已经比较清楚了,接下来我们进入代码设计。

整体逻辑

  二进制求和,刚看到题目,嘿;直接用int或者long类型转化呗!是不对的!大X特X!(会超出长度限制,记住了哈!)
  所以,我们要做的是一个一个字符遍历取出,依次对应进行比较和计算;取出一个字符与“0”字符进行相减( 即计算,与“0”字符对应的ASCII码),同时记录是否有进位,最后进行逐步计算;计算结束后翻转即可得出答案。

主要代码

整体逻辑清晰了之后,同时也有较清楚的注释。直接来看代码吧! (如有不懂的或者更好的建议,欢迎评论区分享友友的看法哈~)

class Solution {
	public static String addBinary(String a, String b) {
		int aLen = a.length() - 1; // a字符串的长度
		int bLen = b.length() - 1; // b字符串的长度
		StringBuilder sb = new StringBuilder();
		int addNum = 0; // 记录上一次是否有进位
		while (aLen >= 0 || bLen >= 0) {
			// 长度大于0
			int aNum = 0; // a字符串的数值(默认为0)
			int bNum = 0; // b字符串的数值(默认为0)
			if (aLen >= 0) { // a字符串长度大于0
				// 取a的最后一个字符(同时,a的字符串长度-1)
				aNum = a.charAt(aLen--) - '0'; // 匹配
			}
			if (bLen >= 0) {// b字符串长度大于0
				// 取b的最后一个字符(同时,b的字符串长度-1)
				bNum = b.charAt(bLen--) - '0';
			}
			// 计算当前的相加的结果
			int countSum = aNum + bNum + addNum;
			if (countSum > 1) {
				// 当前有进位,标记为1
				addNum = 1;
			} else {
				// 无进位,为0
				addNum = 0;
			}
			// 计算结果求余,添加
			sb.append(countSum % 2);
		}
		if (addNum == 1) {
			// 最后是否有进位
			sb.append(addNum);
		}
		// 把结果翻转并转为字符串类型(因为是一个一个append的,最后需要翻转)
		return sb.reverse().toString();
	}
}

三、结果展示

结果展示.png

四、人生总结

  最近看了剧《莉亚的七重人生》的解说,看到弹幕有句话:没有你的世界,更美好?个人有点不太认同,因为我觉得世界有你无你只是对于世界。但是对于你自己,你就是你自己的世界。

题目数据库

Gitee:传送门

文章小尾巴

文章写作、模板、文章小尾巴可参考:《写作“小心思”》
  感谢你看到最后,最后再说两点~
  ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
  ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
  我是南方者,一个热爱计算机更热爱祖国的南方人。

  (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)