简单的两数之和再次乱入<< Add Two Numbers >>
请看题目描述:
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
//Definition for singly-linked list.
class ListNode
{
public int val;
public ListNode next;
public ListNode(int x)
{
val = x;
}
10 }
分析:
这个两数相加不难,只是两个正整数都放在了链表里面了而已。还有一点是,整数的每一位数字都是放过来存放的,那么这样就明显降低了难度了,实现起来就像我们小学的时候列树式计算两个数的和,从低位加起,和与10的余数放在本位,和与10的商产生高位进位。在本题只需从两个链表的表头开始相加,用一个存放计算结果的链表的对应位置存放两个链表对应位置的整数和进位和除以10的余数,并用临时变量存放进位,用于加入下一次的两个整数之和中。直到两个链表中长的链表也遍历完了,那么结果链表也就出来了。结果链表的整数的各位数字也是反序的。 从前面的分析来看我们可以使用递归和非递归两种算法实现。
C#参考实现如下:
递归实现:
public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
{
return AddTwoNumbers(l1, l2, );
}
public ListNode AddTwoNumbers(ListNode l1, ListNode l2 , int carry)
{
if(l1 == null && l2 == null && carry ==)
{
return null;
}
ListNode result = new ListNode();
int sum = (l1 == null ? : l1.val) + (l2 == null ? : l2.val) + carry;
result.val = sum % ;
ListNode more = AddTwoNumbers( l1 == null ? null : l1.next ,
l2 == null ? null :l2.next,
sum >= ? : );
result.next = more;
return result;
}
非递归实现:
public ListNode AddTwoNumbers2(ListNode l1, ListNode l2)
{
ListNode node = new ListNode();
ListNode result = node; int carry = ;
while(l1 != null || l2 != null || carry != )
{
int sum =( l1 ==null ? : l1.val )+( l2 == null ? : l2.val )+ carry;
l1 =( l1 ==null ? null : l1.next);
l2 =( l2 == null ? null : l2.next); node.next = new ListNode(sum % );
node = node.next; carry = sum / ;
}
return result.next;
}
总结:这个题目不难只要静下心来就可以想出来,涉及的细节问题也不多。那么如果把题目改一下,改成两个链表中存放正整数的每一位数字是正向存放的,又该如何实现呢?注意:链表是单向的。这时就要注意两个整数的位数长短了。我们可以这样实现:a)先比较两个链表的长度并用零填充较短的链表 b)递归结果加到首部
简单的两数之和再次乱入<< Add Two Numbers >>的更多相关文章
- leetcode刷题--两数之和(简单)
一.序言 第一次刷leetcode的题,之前从来没有刷题然后去面试的概念,直到临近秋招,或许是秋招结束的时候才有这个意识,原来面试是需要刷题的,面试问的问题都是千篇一律的,只要刷够了题就差不多了,当然 ...
- 【Leetcode】【简单】【1. 两数之和】【JavaScript】
题目描述 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能 ...
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全 Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...
- LeetCode题解001:两数之和
两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- LeetCode1——两数之和
最近在家拧三阶魔方,把初级的玩法掌握了,也就是可以还原六个面了,速度不快,但是也很兴奋.三阶魔方的初级玩法按照套路拧就可以了,每一步需要完成的任务,该步骤转动的方法基本都是固定的,而且变化也并不是特别 ...
- 653. 两数之和 IV - 输入 BST + HashSet
653. 两数之和 IV - 输入 BST 题目描述 题解分析 最简单的方法就是遍历整棵树,找出所有可能的组合,判断是否存在和为 kk 的一对节点.现在在此基础上做一些改进. 如果存在两个元素之和为 ...
- leetcode算法1.两数之和
哈喽!大家好,我是[学无止境小奇],一位热爱分享各种技术的博主! [学无止境小奇]的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过. [学无止 ...
- LeetCode 371. Sum of Two Integers (两数之和)
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...
- [LeetCode] Two Sum IV - Input is a BST 两数之和之四 - 输入是二叉搜索树
Given a Binary Search Tree and a target number, return true if there exist two elements in the BST s ...
随机推荐
- jquery.validate的 使用
需要引入jar包 <script type="text/javascript" src="js/jquery-1.10.2.min.js">< ...
- Ubuntu 14.04 分区方案
我磁盘大概还有70多G的空间吧,我全部拿来使用的.真实的双系统哦. 一般来讲,linux系统分区最少要包括/和/swap两个.这样据说会影响性能,没有这样安装过,就无从考证啦.其实就是重装系统的时候, ...
- sql server多表数据批量更新
update wset w.TagCount=x.TagCountfrom (select ItemID,COUNT(*) as TagCount from r where IsValid=1 gro ...
- MySQL学习笔记_2_MySQL创建数据表(上)
MySQL创建数据表(上) 一.创建数据表的SQL语句模型[弱类型] CREATETABLE [IF NOT EXISTS] 表名称( 字段名1列的类型[属性][索引], 字段名2 列的类型[属性][ ...
- Reorder List [LeetCode]
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...
- (转载整理)SAP ERP常用T-CODE
其实最讨厌做ERP的项目了.不过,身不由己的嘛! 网上资料加一些整理. 与客户相关 VD01 建立客户 Create customerVD02 更改客户 Change customerVD03 显示 ...
- 镜像渐变-radio-gradient
2013年11月15日13:08:37 <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"&g ...
- uva 12186
12186 - Another Crisis Time limit: 3.000 seconds A couple of years ago, a new world wide crisis star ...
- jQuery Easing动画效果扩展(转)
jQuery API提供了简单的动画效果如淡入淡出以及自定义动画效果,而今天我给大家分享的是一款jQuery动画效果扩展增强插件jquery.easing.js,使用该插件可以实现直线匀速运功.变加速 ...
- eclipse 项目修改和更新项目,回退版本,解决分支的冲突的办法
一个关于git的图 1.我在github建立了3个分支. 2.把其中一个分支拉到本地. 项目修改提交到远程库 3.修改完代码以后commit项目,点击项目右击->team->commit ...