leetcode add_binary 采坑记
尽管add_binary在leetcode中是一个简单难度,但是踩了不少坑,记录一下
描述:
给两个字符串形式的二进制数,要求求和并输出字符串形式的结果,其中a和b均不为空字符串
样例:
a=“1010”,b="1011",输出“10101”.
过程:
刚看到题目的时候觉得很简单,只要每一位按位相加就好了,很容易写出第一版代码
public class AddBinary {
public String add_binary(String a,String b){
char[] chars_a = a.toCharArray();
char[] chars_b = b.toCharArray();
int c_out = 0;
// 统计最长位数,将chars_a设置为最长的
int max_length = chars_a.length;
if(chars_a.length<chars_b.length){
max_length = chars_b.length;
char[] temp = chars_a;
chars_a = chars_b;
chars_b = temp;
}
// 设置结果长度为长的那个
char[] result = new char[max_length];
// 计算结果
for(int i=0;i<max_length;i++){
int t;
if(i<chars_b.length){
// 重合部分
t = chars_a[i]-'0'+chars_b[i]-'0'+c_out;
}else {
// 非重合部分
t = chars_a[i]+c_out;
}
if(t>1){
c_out = 1;
result[i]=(char)(t-2);
}else {
c_out=0;
result[i]=(char)t;
}
}
StringBuilder stringBuilder = new StringBuilder();
if(c_out!=0){
stringBuilder.append(1);
}
stringBuilder.append(result);
return stringBuilder.toString();
}
}
开心的测试了一下,结果输出的是什么东西,还有空白符,这就是不严谨的问题了,在设置result[i]的时候没有考虑到再加上‘0’的ASCII码值,导致输出的是0或者1对应的ASCII值结果,实验第二版代码
public class AddBinary {
public String add_binary(String a,String b){
char[] chars_a = a.toCharArray();
char[] chars_b = b.toCharArray();
int c_out = 0;
// 统计最长位数,将chars_a设置为最长的
int max_length = chars_a.length;
if(chars_a.length<chars_b.length){
max_length = chars_b.length;
char[] temp = chars_a;
chars_a = chars_b;
chars_b = temp;
}
// 设置结果长度为长的那个
char[] result = new char[max_length];
// 计算结果
for(int i=0;i<max_length;i++){
int t;
if(i<chars_b.length){
// 重合部分
t = chars_a[i]-'0'+chars_b[i]-'0'+c_out;
}else {
// 非重合部分
t = chars_a[i]-'0'+c_out;
}
if(t>1){
c_out = 1;
result[i]=(char)(t-2+'0');
}else {
c_out=0;
result[i]=(char)(t+'0');
}
}
StringBuilder stringBuilder = new StringBuilder();
if(c_out!=0){
stringBuilder.append(1);
}
stringBuilder.append(result);
return stringBuilder.toString();
}
}
结果显示都是数字了没问题,但是计算的结果为什么出错了,原因在于String.toCharArray(),是按照从左向右的顺序读入的,即第零位是二进制数的最高为,相当于反了过来,所以第三版代码出现了
public class AddBinary {
public String add_binary(String a,String b){
char[] chars_a = a.toCharArray();
char[] chars_b = b.toCharArray();
int c_out = 0;
// 统计最长位数,将chars_a设置为最长的
int max_length = chars_a.length;
if(chars_a.length<chars_b.length){
max_length = chars_b.length;
char[] temp = chars_a;
chars_a = chars_b;
chars_b = temp;
}
// 设置结果长度为长的那个
char[] result = new char[max_length];
// 计算结果
for(int i=0;i<max_length;i++){
int t;
if(i<chars_b.length){
// 重合部分
t = chars_a[max_length-i-1]-'0'+chars_b[chars_b.length-i-1]-'0'+c_out;
System.out.println(chars_a[max_length-i-1]+","+chars_b[chars_b.length-i-1]+","+c_out+","+t);
}else {
// 非重合部分
t = chars_a[max_length-i-1]-'0'+c_out;
System.out.println(chars_a[max_length-i-1]+","+c_out+","+t);
}
if(t>1){
c_out = 1;
result[max_length-i-1]=(char)(t-2+'0');
}else {
c_out=0;
result[max_length-i-1]=(char)(t+'0');
}
}
StringBuilder stringBuilder = new StringBuilder();
if(c_out!=0){
stringBuilder.append(1);
}
stringBuilder.append(result);
return stringBuilder.toString();
}
}
总算是ac了,感觉很是坑啊
leetcode add_binary 采坑记的更多相关文章
- 分布式改造剧集之Redis缓存采坑记
Redis缓存采坑记 前言 这个其实应该属于分布式改造剧集中的一集(第一集见前面博客:http://www.cnblogs.com/Kidezyq/p/8748961.html),本来按照顺序 ...
- Spring Cloud Config采坑记
1. Spring Cloud Config采坑记 1.1. 问题 在本地运行没问题,本地客户端服务能连上本地服务端服务,可一旦上线,发现本地连不上线上的服务 服务端添加security登录加密,客户 ...
- k8s采坑记 - 解决二进制安装环境下证书过期问题
前言 上一篇k8s采坑记 - 证书过期之kubeadm重新生成证书阐述了如何使用kubeadm解决k8s证书过期问题. 本篇阐述使用二进制安装的kubernetes环境,如何升级过期证书? k8s配置 ...
- Redis适配采坑记
Redis适配采坑记 相对于其他的适配,Redis可以说是非常简单的其中只发现一个坑 问题一: 问题描述: redis认证失败 问题详解: redis连接配置时,本地需要采用password属性,远程 ...
- tk.mybatis通用工具采坑记
tk.mybatis通用工具pom <!--mybatis依赖--> <dependency> <groupId>org.mybatis.spring.boot&l ...
- dubbo初学采坑记
写在前面的话 dubbo 现在是apache组织旗下的项目,相信国内也有很多人使用.最近一个同事离职,我就接手了他的项目.远程通讯就是用的dubbo框架来实现的.使用Intelij idea 写了一个 ...
- Service worker (@nuxtjs/workbox) 采坑记
PWA(Progressive Web App)是前端的大趋势,它能极大的加快前端页面的加载速度,得到近乎原生 app 的展示效果(其实难说).PWA 其实是多种前端技术的组合,其中最重要的一个技术就 ...
- aidl使用采坑记
什么是AIDL? AIDL是 Android Interface definition language的缩写,它是一种Android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口 A ...
- css选择器:first-child和nth-child 采坑记
今天想用nth-child来给一个类似于树的目录(bootstrap-nav-tree 一个angularjs插件)设置不同的颜色,结构大致类似于 <ul> <li class=& ...
随机推荐
- 《Tomcat与Java Web开发技术详解》思维导图
越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...
- Simotion 绝对值编码器使用外部开关回零
问题来源: 西门子的1FK7二代电机,目前已经没有增量编码器.标准的编码器选项是单圈绝对值,或多圈绝对值. 在某些应用中,如印刷机的版辊.模切轴.飞剪电机等,需要使用外部开关来回零.下文描述了使用外部 ...
- SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解
(1) 在SAP CRM里创建一个Lead后,会观察到有一个Opportunity自动生成,这是通过什么后台逻辑实现的呢? 检查前台日志或者后台事务码SLG1,发现有很多属于用户WF-BATCH的日志 ...
- IntelliJ IDEA 2017.3-2018.1 全系列汉化包
JetBrains 系列软件汉化包 关键字: Android Studio 3.0-3.1 汉化包 GoLand 2017.3.2-2018.1 汉化包 IntelliJ IDEA 2017.3-20 ...
- 关于Struts2中的ognl-2.6.11.jar和ognl-2.7.3.jar解决思路
关于Struts2中的ognl-2.6.11.jar和ognl-2.7.3.jar建了一个简单的工程:导入的jar包有六个,包括commons-fileupload-1.2.1.jarcommons- ...
- Task ‘run’ not found in root project
问题现象: Task 'run' not found in root project 'springframework'. 问题原因: 没有在gradle.build文件中添加如下配置, mainCl ...
- 在编译器中调试spark程序处理
在IDEA中调试spark程序会报错 18/05/16 07:33:51 WARN NativeCodeLoader: Unable to load native-hadoop library for ...
- PHP-----TP框架基础
TP框架基础 把Thinkphp框架的压缩包解压到php文件夹下----www目录下. Thinkphp文件夹都有什么呢??? (所有用TP框架做的程序,要访问程序里面的网页.内容的话,全部要走这 ...
- Linux关于压缩和解压缩实例
在谈到压缩和解压缩,我想说说它们的应用场景,其实它们主要的应用场景是有这么几个方面? (1)备份(几十个数据库每天进行备份,即包含数据又包含脚本,还有其他十分重要的日志文件等等); (2)降低服务器存 ...
- Redis(RedisTemplate)使用hash哈希
RedisTemplate配置:https://www.cnblogs.com/weibanggang/p/10188682.html package com.wbg.springRedis.test ...