LeetCode-两个结构分别遍历,然后合并
今天做了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-两个结构分别遍历,然后合并的更多相关文章
- SQL 将两个结构相同的表合并到成一个表
select * into 新表名 from (select * from T1 union all select * from T2) 这个语句可以实现将合并的数据追加到一个新表中. 不合并重复数据 ...
- SQL 两张结构一样的表合并查询 .
select * from table1 union all select * from table2 union all 是所有的都显示出来: select * from table1 union ...
- 合并两个结构完全相同的DataTable
两个结构一模一样的DataTable如何合并? 例子:使用Winform进行演示,表2的数据为固定的,表1的数据可以动态添加,通过合并按钮合并表1和表2的数据到表3 1.规定公共的DataTable结 ...
- 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 ...
- 02-线性结构1 两个有序链表序列的合并(15 point(s)) 【链表合并】
02-线性结构1 两个有序链表序列的合并(15 point(s)) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L ...
- 将两个列不同的DataTable合并成一个新的DataTable
/// <summary> /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable /// </summary> ...
- LeetCode:二叉树的前序遍历【144】
LeetCode:二叉树的前序遍历[144] 题目描述 给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 题目分析 如果用递 ...
- PTA 两个有序链表序列的合并
6-5 两个有序链表序列的合并 (15 分) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L1, List L ...
- 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型
[Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...
- 什么是CS和BS结构,两种结构的区别
什么是CS和BS结构,两种结构的区别 什么是C/S和B/S结构? C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系 ...
随机推荐
- C++标准库之string返回值研究
先说结论(不一定适用所有环境): 1) GCC默认开启了返回值优化(RVO),除非编译时指定“-fno-elide-constructors”: 2) 现代C++编译器一般都支持返回值优化: 3) s ...
- Runnable与Callable区别
相同点: 两者都是接口:(废话) 两者都可用来编写多线程程序: 两者都需要调用Thread.start()启动线程: 不同点: 两者最大的不同点是:实现Callable接口的任务线程能返回执行结果:而 ...
- python 类成员知识点学习的一个坑(初学者,大神请绕行)
先来段小程序class Foo: name = "abc" def __init__(self,age): self.age = age print(Foo.name)Foo.na ...
- 1.Float精度在JS的解决方法
最近做了一个有关折扣价的计算的功能,所有的运算都是在前台通过js来做,做完之后经过手工核算发现了一个问题,当时做的一个例子是10*0.94,按照我们正常的思维,这个结果应该是9.4,但是在js中的计算 ...
- 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)
[源码下载] 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 ...
- Dubbo 源码分析 - 自适应拓展原理
1.原理 我在上一篇文章中分析了 Dubbo 的 SPI 机制,Dubbo SPI 是 Dubbo 框架的核心.Dubbo 中的很多拓展都是通过 SPI 机制进行加载的,比如 Protocol.Clu ...
- jvm的垃圾回收和内存
垃圾回收: 对象的创建是我们程序员主导的,但是却没有与之相对应的delete方法来删除我们用完的对象,释放这些我们已经不需要再使用的对象的内存空间,gc:垃圾回收机制:指的就是JVM自带的一种释放无用 ...
- IDEA环境下GIT操作浅析之一Idea下仓库初始化与文件提交涉及到的基本命令
目标总括 idea 下通过命令操作文件提交,删除,与更新并推送到github 开源库基本操作idea 下通过命令实现分支的创建与合并操作 idea 下通过图形化方式实现idea 项目版本控制基本操作 ...
- 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...
- Mac 系统安装教程
上周末买了一个二手的Mac,当时是抹掉整个硬盘的,所以只能选择重装系统了.但是,多次重装都是失败了.最后使用USB安装,试了好几次,误打误撞总算成功了. 下面是整个安装的教程: 1. 备份好所有的私人 ...