LeetCode手记-Add Binary
问题描述

问题分析
分析题意,此题实际是求解两个二进制数的和,但是有两点要注意:
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的更多相关文章
- LeetCode 面试:Add Binary
1 题目 Given two binary strings, return their sum (also a binary string). For example,a = "11&quo ...
- LeetCode 67. Add Binary (二进制相加)
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- [LeetCode] 67. Add Binary 二进制数相加
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- 【leetcode】Add Binary
题目简述: Given two binary strings, return their sum (also a binary string). For example, a = "11&q ...
- Java for LeetCode 067 Add Binary
Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...
- LeetCode 67. Add Binary
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- Java [Leetcode 67]Add Binary
题目描述: Given two binary strings, return their sum (also a binary string). For example,a = "11&qu ...
- LeetCode(56)-Add Binary
题目: Given two binary strings, return their sum (also a binary string). For example, a = "11&quo ...
- (String) leetcode 67. Add Binary
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
随机推荐
- 通过windows远程桌面连接CentOS系统
前提: CentOS安装桌面,如果无桌面,请执行 # yum -y groups install "GNOME Desktop" # startx 1 2 配置源 # yum in ...
- lvs+nginx负载均衡
1 学习目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. 掌握lvs+nginx负载 ...
- “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)
在前一部分的最后,我们给出了一个寻路的示例,在大多数情况下,运行还算良好,但是有一个小问题,如下图: 很明显,障碍物已经把路堵死了,但是小球仍然穿过对角线跑了出来! 问题在哪里:我们先回顾一下ASta ...
- idea2017启动ssm项目卡在build阶段后报outofmemory
如上图,设置build process heap size(Mbytes)(构建过程堆大小(单位MB))为4000,即约4GB.之前设置的是700,修改之后问题解决. 补充:导入新项目后,此参数会初始 ...
- SpringCloud Feign context-path踩到的坑
最近在使用SpringCloud的context-path时,遇到了一些坑,记录一下. server.context-path(上下文) 服务提供者的application配置文件中有一个属性叫ser ...
- 34 【kubernetes】安装手册
全文参考了两篇中文文档: 1,https://www.cnblogs.com/RainingNight/p/using-kubeadm-to-create-a-cluster.html 2,http: ...
- [Java核心技术笔记]并发
Runnable Runnable接口是函数式接口 //Runnable接口 public interface Runnable { void run(); } //用lambda表达式创建实例 Ru ...
- 738. Monotone Increasing Digits 单调递增的最接近数字
[抄题]: Given a non-negative integer N, find the largest number that is less than or equal to N with m ...
- [leetcode]48. Rotate Image旋转图像
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- 快速创建IIS站点并设置权限
net user WebSiteUser WebSiteUserWebSiteUser /add /yWMIC Path Win32_UserAccount Where Name="Web ...