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.工作站或小型机,并采用大型数据库系 ...
随机推荐
- python2 python3区别(续)
1.除法 Python2 Python3 int/int → int int/int → float python2下整数除以整数返回整数类型,python3下整数除以整数返回浮点数类型 当某些语句假 ...
- 小白Monkey学习笔记
Monkey是google提供的一款对Android app进行压力测试工具,基于随机坐标位置,进行点击.滑动.输入等操作. Monkey的环境配置 pc电脑需要配置adb环境 Monkey程序由An ...
- Windows的奇巧淫技(为什么GIF显示不出来??)
谁的电脑里没点小秘密?东藏西藏到最后自己都找不到了有木有?今天教大家个隐藏文件的高招: 将任意文件隐藏到图片中!怎么样?再也不用建什么「马列主义哲学」的文件夹啦!
- 《HTTP权威指南》3-HTTP报文
报文流 HTTP报文是在HTTP应用程序之间发送的数据块,这些数据块以文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分.这些报文在客户端,服务器和代理之间流动. 报文的组成 ...
- 背水一战 Windows 10 (100) - 应用间通信: 分享
[源码下载] 背水一战 Windows 10 (100) - 应用间通信: 分享 作者:webabcd 介绍背水一战 Windows 10 之 应用间通信 分享 示例1.本例用于演示如何开发一个分享的 ...
- 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8
原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...
- centos7使用wordpress布署网站(2)
1.接下来需要配置数据库,为使用wordpress做准备 修改认证方式: vim .../phpMyAdmin/config.inc.php [...] $cfg['Servers'][$i]['au ...
- JavaScript标识符与关键字和保留字
区分大小写 JavaScript中的一切(变量.函数名.操作符)都区分大小写.例如,变量名itbsl和变量名ITbsl是两个不同的变量. 标识符 所谓标识符,就是指变量.函数.属性的名字,或者函数的参 ...
- PowerShell 实现批量下载文件
简介 批量文件下载器 PowerShell 版,类似于迅雷批量下载功能,且可以破解 Referer 防盗链 源代码 [int]$script:completed = 0 # 下载完成数量 [int]$ ...
- GIT的初级使用
安装git [root@localhost ~]# yum -y install git [root@localhost ~]# git --version git version 1.8.3.1 初 ...