今天做了leetcode67题,两个2进制数相加,回想了一下其实有很多这种类型的题,比如leetcode2两数相加。

在做这种题时我自己的思路就是先循环遍历一个短的,然后跳出循环,判断是哪个结束,再接着合并。比如67题如下:

给定两个二进制的字符串,比如a=”11“,b=”1“,返回结果”100“。

string addBinary(string a, string b) {
int pos_a = a.size() -;
int pos_b = b.size() -;
int length = max(a.size(), b.size())+;
string result(length,' ');
int add = ;
int i = length - ;
//从后向前遍历,直到一个string用完
for ( ; i >= ; i--) {
if (- == pos_a || - == pos_b)
break;
//有进位的情况
if (a[pos_a] + b[pos_b] + add - '' - ''>= ) {
result[i] = (a[pos_a] -'' + b[pos_b] - ''+ add)% + '';
add = ;
}else{
result[i] = (a[pos_a] - '' + b[pos_b] - '' + add) + '';
add = ;
}
pos_a--;
pos_b--;
}
//如果两个都用完
if (- == pos_a && - == pos_b) {
if (add == )
result.erase(, );
else
result[] = '';
return result;
}
//如果只有a用完
if (- == pos_a) {
while (pos_b != -) {
result[i--] = (b[pos_b] -''+ add)% + '';
add = (b[pos_b--] + add - '')/ ;
}
if (add == )
result[] = '';
else
result.erase(,);
}else{
//如果只有b用完
while (pos_a != -) {
result[i--] = (a[pos_a]-'' + add) % +'';
add = (a[pos_a--] + add - '') / ;
}
if (add == )
result[] = '';
else
result.erase(, );
}
return result;
}

67的复杂解法

这使得代码再跳出第一次循环后还需要做很多的工作,而且一不小心还会因为边界条件出错,所以需要寻找一个更加简洁的方法来处理这种问题,寻找leetcode中这种题,多练习一下。

string addBinary(string a, string b) {
string result = "";
int pos_a = a.size() - ;
int pos_b = b.size() - ;
int add = ;
while (pos_a != - || pos_b != - || add == ) {
if (pos_a != -)
add += a[pos_a--] - '';
if (pos_b != -)
add += b[pos_b--] - '';
result = char(add % + '') + result;
add = add/;
}
return result;
}

67的简便写法

上面这种方式代码要简洁很多而且也不容易写错,注意char和string可以直接进行拼接。

在考虑leetcode2,两数相加问题。

同样是使用和上述一样的方法

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int add = ;
ListNode result(-);
ListNode* pos = &result;
while (l1 != NULL || l2 != NULL || add != ) {
if (l1 != NULL) { add += l1->val; l1 = l1->next; }
if (l2 != NULL) { add += l2->val; l2 = l2->next; }
ListNode *temp = new ListNode(add % );
pos->next = temp;
pos = pos->next;
add = add / ;
}
return result.next;
}

2的简便解法

LeetCode-两个结构分别遍历,然后合并的更多相关文章

  1. SQL 将两个结构相同的表合并到成一个表

    select * into 新表名 from (select * from T1 union all select * from T2) 这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数据 ...

  2. SQL 两张结构一样的表合并查询 .

    select * from table1 union all select * from table2 union all 是所有的都显示出来: select * from table1 union ...

  3. 合并两个结构完全相同的DataTable

    两个结构一模一样的DataTable如何合并? 例子:使用Winform进行演示,表2的数据为固定的,表1的数据可以动态添加,通过合并按钮合并表1和表2的数据到表3 1.规定公共的DataTable结 ...

  4. LeetCode 617. Merge Two Binary Tree (合并两个二叉树)

    Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...

  5. 02-线性结构1 两个有序链表序列的合并(15 point(s)) 【链表合并】

    02-线性结构1 两个有序链表序列的合并(15 point(s)) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L ...

  6. 将两个列不同的DataTable合并成一个新的DataTable

    /// <summary>         /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable         /// </summary> ...

  7. LeetCode:二叉树的前序遍历【144】

    LeetCode:二叉树的前序遍历[144] 题目描述 给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 题目分析 如果用递 ...

  8. PTA 两个有序链表序列的合并

    6-5 两个有序链表序列的合并 (15 分)   本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L1, List L ...

  9. 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型

    [Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...

  10. 什么是CS和BS结构,两种结构的区别

    什么是CS和BS结构,两种结构的区别 什么是C/S和B/S结构?         C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系 ...

随机推荐

  1. 反编译看java for-each循环

    java 1.5发行版引入的for-each循环.(引自<Effective Java>中文版第二版 第46条) 如以下对数组列表的for-each循环示例: public class F ...

  2. Javaweb 编解码流程

    参考: https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/#N10263 https://www.cnblogs.com/ch ...

  3. 我的C#跨平台之旅(四):使用AOP(filter、attribute)进行系统增强

    1.使用OData提速REST API开发 引入NuGet包:Microsoft.AspNet.WebApi.OData 在启动类中添加如下配置(示例为全局配置,也可基于Controller或Acti ...

  4. 两个VirtualBox版本装的语言不一样?

    两个VirtualBox版本装的语言不一样? 1.这个是我用的两个版本的VirtualBox. 2.用这个 VirtualBox-4.3.20-96997-Win.exe安装的时候,一直是英文. 3. ...

  5. #224 Profile Lookup (for in & if )

    我们有一个对象数组,里面存储着通讯录. 函数 lookUp 有两个预定义参数:firstName值和prop属性 . 函数将会检查通讯录中是否存在一个与传入的 firstName 相同的联系人.如果存 ...

  6. SQL 经典应用

    SQL Server日常维护常用的一些脚本整理. 1.sql server开启clr权限: exec sp_configure 'clr enabled', 1 GO RECONFIGURE GO A ...

  7. Educational Codeforces Round 25

    A 题意:给你一个01的字符串,0是个分界点,0把这个字符串分成(0的个数+1)个部分,分别求出这几部分1的个数.例如110011101 输出2031,100输出100,1001输出101 代码: # ...

  8. 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri

    [源码下载] 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri 作者:webabcd 介绍背水一战 Windows 10 之 关联启动 ...

  9. 谦先生-hadoop大数据运维纪实

    1.NN宕掉切不过去先看zkfc的log引起原因是dfs.ha.fencing.ssh.private-key-files的配置路径配错造成以致无法找到公钥 2.dfs.namenode.shared ...

  10. Javascript高级编程学习笔记(37)—— DOM(3)Element

    Element类型 除了Document类型之外,Element类型应该就是web编程中最常用的类型了 Element类型主要用于表现XML.HTML元素,提供对元素标签名.子节点以及特性的访问 特性 ...