问题描述

问题分析

分析题意,此题实际是求解两个二进制数的和,但是有两点要注意:

1.字符串的长度不限,所以相应十进制数值很可能会超过int的上限。

2.二进制的加法规则是自右向左进位,需要注意,以题目示例为例:

      11

     +  1

------

      100

所以直接将二进制字符串转成十进制值相加求和,再将十进制和转为二进制字符串的做法是不被接受的,虽然其复杂度只有O(1),错误做法如下;

public class Solution {
public string AddBinary(string a, string b) {
var result = string.Empty;
var sum = StringToInt(a) + StringToInt(b);
result = IntToString(sum);
return result;
}
public long StringToInt(string s)
{ if (s != null || s.Length > )
{
var a = Convert.ToInt32(s, );
return a;
}
return long.Parse(""); } public string IntToString(long i)
{
var b = string.Empty;
b= Convert.ToString(i, );
return b;
}
}

正确的做法应该是将二进制字符串转为字符集合,根据进算结果相应进位或者求和,这样可以忽略int上限,复杂度也仅为O(n),代码实现如下:

public class Solution {
public string AddBinary(string a, string b) {
var result = string.Empty;
var dataA = a.Reverse<char>().ToList();
var dataB = b.Reverse<char>().ToList();
var maxAry = dataA.Count > dataB.Count ? dataA : dataB;
var degree = ;
for (int i = ; i < maxAry.Count; i++)
{
var j = ;
var k = ;
if (i < dataA.Count)
{
j = dataA[i] - '';
}
if (i < dataB.Count)
{
k = dataB[i] - '';
}
var sum = j + k + degree;
switch (sum)
{
case :
maxAry[i] = '';
degree = ;
break;
case :
maxAry[i] = '';
degree = ;
break;
case :
maxAry[i] = '';
degree = ;
break;
case :
maxAry[i] = '';
degree = ;
break;
} }
if (degree == )
{
maxAry.Add('');
} maxAry.Reverse(); for (int k = ; k < maxAry.Count; k++)
{
result += maxAry[k];
}
return result; } }

其中值得一提的是,我将容器由Array换成List之后,速度提升了近30ms,跑出了此题C#解答的最好纪录。

LeetCode手记-Add Binary的更多相关文章

  1. LeetCode 面试:Add Binary

    1 题目 Given two binary strings, return their sum (also a binary string). For example,a = "11&quo ...

  2. LeetCode 67. Add Binary (二进制相加)

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  3. [LeetCode] 67. Add Binary 二进制数相加

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  4. 【leetcode】Add Binary

    题目简述: Given two binary strings, return their sum (also a binary string). For example, a = "11&q ...

  5. Java for LeetCode 067 Add Binary

    Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...

  6. LeetCode 67. Add Binary

    Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...

  7. Java [Leetcode 67]Add Binary

    题目描述: Given two binary strings, return their sum (also a binary string). For example,a = "11&qu ...

  8. LeetCode(56)-Add Binary

    题目: Given two binary strings, return their sum (also a binary string). For example, a = "11&quo ...

  9. (String) leetcode 67. Add Binary

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

随机推荐

  1. cdnbest如何让用户访问走最近最快的线路(分组线路)

    用户访问网站有时网络有互通的问题,cdnbest的分组解析可以细分线路,让用户访问自动走最优线路,线路不细分都加默认里,访问的节点是随机分配的 下面我们讲下如何设置: 比如你有电信,移动,和国外的节点 ...

  2. Django 表关系

    1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义2.order_by asc desc 1. 表关系的创建- OneToOne student = ...

  3. ucore-lab1-练习5report

    实验5--实现函数调用堆栈跟踪函数 需要完成kdebug.c中函数print_stackframe的实现,可以通过函数print_stackframe来跟踪函数调用堆栈中记录的返回地址. 一.函数堆栈 ...

  4. 网页屏蔽f12、右键菜单等操作

    1.屏蔽f12 document.onkeydown = function(){ if(window.event && window.event.keyCode == 123) { a ...

  5. vue 兼容性——ie家族不支持promise

    解决方案: 安装: cnpm install es6-promise 在 main.js 引入 : polyfill require("es6-promise").polyfill ...

  6. dump、load和dumps、loads的区别

    dump: 将dict(字典)转换为str(字符串),并写入json文件中. load: 用于从json文件中读取数据 运行结果: dumps: 将dict(字典)转换为str(字符串). 运行结果: ...

  7. [leetcode]25. Reverse Nodes in k-Group每k个节点反转一下

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k  ...

  8. Jmeter创建一个web测试计划

    1.  下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 下载后解压到你想“安装”的路径下,比如: D:\Program Files ...

  9. jqgrid获取选中行指定列的值

    部分js如下: var id = $("#grid-table").jqGrid('getGridParam','selrow');//根据点击行获得点击行的id(id为jsonR ...

  10. hbase-基础架构

    介绍 hbase架构主要由hmaster,zookeeper和regionserver三部分构成,底层数据存储在hdfs中 hmaster 允许有多个master节点,使用zookeeper控制,保证 ...