问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3929 访问。

给定两个二进制字符串,返回他们的和(用二进制表示)。

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

输入: a = "11", b = "1"

输出: "100"

输入: a = "1010", b = "1011"

输出: "10101"


Given two binary strings, return their sum (also a binary string).

The input strings are both non-empty and contains only characters 1 or 0.

Input: a = "11", b = "1"

Output: "100"

Input: a = "1010", b = "1011"

Output: "10101"


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3929 访问。

public class Program {

    public static void Main(string[] args) {
var a = "1010";
var b = "1011"; var res = AddBinary(a, b);
Console.WriteLine(res); Console.ReadKey();
} private static string AddBinary(string a, string b) {
//找出最长的加1,留1位进位
var max = Math.Max(a.Length, b.Length) + 1;
//按总长度补位,以便统一处理,否则要考虑边界
var a2 = a.PadLeft(max, '0');
var b2 = b.PadLeft(max, '0');
//定义list存中间计算结果
var list = new List<int>();
//进位标志
var carryFlag = false;
for(int i = max - 1; i >= 0; i--) {
var add = int.Parse(a2[i].ToString())
+ int.Parse(b2[i].ToString());
//计算当前位的值,如果之前进位标志为真,则额外+1
if(carryFlag) add++;
//大于等于2时,此时仍然需要进位,带入下一次循环
carryFlag = add >= 2;
//存入中间计算结果
list.Add(add % 2);
}
//定义结果
var res = string.Empty;
//反转,list是按逆序从低位到高位的
list.Reverse();
//遍历输出到res
list.ForEach(r => { res += r.ToString(); });
//取消最高位0
res = res.TrimStart('0');
//如果空了,返回0
if(res.Length == 0) res = "0";
//返回结果
return res;
} }

以上给出1种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3929 访问。

10101

分析:

设两个二进制字符串中较长的字符串的长度为 n ,那么以上算法的时间复杂度为:  。

最新文章

  1. 原生js实现jquery库中部分事件的功能(jquery库封装二)
  2. 【Javascript】重新绑定默认事件
  3. shared memory realm does not exist
  4. Javascript 中的一些关于时间的操作【转】
  5. awk 合并文件
  6. RT-Thread多线程导致的临界区问题
  7. jquery 实现 隐藏交替同时记住以前隐藏的样式
  8. Oracle解锁的相关操作(转)
  9. 将Windows系统默认的Administrator帐号改名为我们自定义的名称
  10. Linux入门命令解释(1)
  11. APP上传APP Store遇到的各种问题
  12. [Swift]LeetCode243.最短单词距离 $ Shortest Word Distance
  13. 2019南昌网络赛G. tsy&#39;s number
  14. 大众点评selfxss结合两个csrf变废为宝(已修复,故公开,不涉及真实参数)
  15. NGUI_创建图集Altas
  16. 安装phpssdbadmin
  17. Node 表单query
  18. PHP 扩展开发之Zephir
  19. 解决oracle语句中 含数字的字符串按数字排序问题
  20. Android屏幕density, dip等相关概念总结

热门文章

  1. Static关键字的使用
  2. lua的table表去重
  3. Python 简明教程 --- 23,Python 异常处理
  4. javascript算法 最短路径问题
  5. Docker 入门教程(2)——image与container
  6. Azure AD(五)使用多租户应用程序模式让任何 Azure Active Directory 用户登录
  7. 6-Pandas之缺失值处理
  8. 环境篇:数据同步工具DataX
  9. IDEA查看项目日志Version Control、log
  10. 实践录丨如何在鲲鹏服务器OpenEuler操作系统中快速部署OpenGauss数据库