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.工作站或小型机,并采用大型数据库系 ...
随机推荐
- ArcSDE
ArcSDE,即数据通路,是ArcGIS的空间数据引擎,它是在关系数据库管理系统(RDBMS)中存储和管理多用户空间数据库的通路.从空间数据管理的角度看,ArcSDE是一个连续的空间数据模型,借助这一 ...
- numpy 与 matplotlib 的应用
numpy 与 matplotlib 的应用 一.库函数介绍 1. numpy库 NumPy(Numeric Python)提供了一个N维的数组类型ndarray,Numpy底层使用C语言编写,内部解 ...
- 把dotx模板的样式应用到当前文档中(不应用dotx的其他东西)
Word.Document doc = this.Application.ActiveDocument; //模板样式添加到当前文档 doc.CopyStylesFromTemplate(@" ...
- 在windows系统安装pygame项目
STEP1: 下载安装程序 访问https://bitbucket.org/pygame/pygame/downloads/,查找与你运行的Python版本匹配的安装程序,如果找不到,可以去https ...
- 有哪些知名的公司在用Python
谷歌:Google App Engine.code.Google.com.Google earth.谷歌爬虫.Google广告等项目都在大量使用Python开发 CIA:美国中情局网站就是用Pytho ...
- HDU 2516 斐波那契博弈
点这里去看题 n为斐波那契数时,先手败,推断方法见算法讲堂 #include<bits/stdc++.h> using namespace std; int main() { ],i,n, ...
- 性能测试-----monkey稳定性测试
我们稳定性测试用的monkey,跑monkey的同时存储log monkey脚本: @echo.@set /p name=请输入你的名字(比如liuyl): set YYYYmmdd=%date:~0 ...
- 亲子编程玩Micro:bit-动力小车“麦昆”
少儿编程之风已经吹进各大城市,编程猫.乐博机器人.童程童美等专业培训机构逐渐进入大家的视野,年龄段已经从K12逐渐降低到幼儿园中班.其实,少儿编程的门槛并不高,它不会让孩子一上手就去接触代码,而是会通 ...
- 省钱版----查找 IoT 设备TTL线序__未完待续
作者:仙果 原文来自:省钱版—-查找 IoT 设备TTL线序 省钱版----查找 IoT 设备TTL线序__未完待续 缘由 在IoT固件调试分析的过程中,建议首先在IoT设备的板子上焊接调试线,这是能 ...
- IDEA环境下GIT操作浅析之二-idea下分支操作相关命令
上次写到<idea下仓库初始化与文件提交涉及到的基本命令>,今天我们继续写IDEA环境下GIT操作之二--idea下分支操作相关命令以及分支创建与合并. 1.idea 下分支操作相关命令 ...