[LeetCode][2]Add Two Numbers解析 -Java实现

原创 2016年06月01日 16:34:44

Q:

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.

A:

以下解法和代码没有借阅以往任何资料,如果有更好的解法请在评论区留言

他的意思大致是给你两个非负数链表,每个链表代表一个数字,这个数字的每一位都倒叙排列并每个节点含有一个数字,把两个数字相加并返回链表。

无非就是把两个连接相加一下,其中可能牵扯到进位的问题,也是在链表的结尾处进位,本身也没有什么好优化的点。但是有两种解决问题的办法。

1、把链表转化成long相加之后再转化成链表

2、在链表的基础上做相加

我认为1之间做了太多无谓的转换比较浪费时间直接做2,2中又可以划分为:

1、把链表中倒叙的数字正过来

2、直接改变数字的进位效果,向后进位。

我选择了2因为效率高啊,代码如下:

public class AddTwoNumbers {
	public static void main(String[] args){
		LinkedList link1 = new LinkedList();
		link1.addLast(1);
		link1.addLast(2);
		LinkedList link2 = new LinkedList();
		link2.addLast(1);
		link2.addLast(9);
		link2.addLast(2);
		LinkedList resultLink = addTwoNumbers(link1, link2);
		for(Object i : resultLink){
			System.out.println(""+(int)i);
		}
		
	}
	public static LinkedList addTwoNumbers(LinkedList link1,LinkedList link2){
		int maxLength = 0;
		int minLength = 0;
		LinkedList resultLink = null;//结果链表
		int carry = 0;
		if(link1.size()>link2.size()){
			resultLink = link1;
			maxLength = link1.size();
			minLength = link2.size();
		}
		else {
			resultLink = link2;
			maxLength = link2.size();
			minLength = link1.size();
		}
		for(int i =0;i<minLength;i++){
			carry = 0;
			int result = (int)link1.get(i)+(int)link2.get(i)+carry;
			if(result>=10){//进位
				carry = (int)result/10;
				if(i==minLength-1){//超出了链表长度
					if(i<maxLength-1){//没有超出最长,不用加位置
						resultLink.set(i+1, (int)resultLink.get(i+1)+carry);
					}else {//超出最长需要加链表长度
						resultLink.addLast(carry);
					}
				}
				resultLink.set(i, result%10);
				
				
			}else {//不进位
				resultLink.set(i, result);
			}
		}
		return resultLink;
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode02:Add Two Numbers Java实现

原题目: You are given two linked lists representing two non-negative numbers. The digits are stored ...
  • gg543012991
  • gg543012991
  • 2016年11月16日 22:06
  • 273

【LeetCode】Add Two Numbers 解题报告

【题目】 You are given two linked lists representing two non-negative numbers. The digits are stored i...
  • ljiabin
  • ljiabin
  • 2014年10月26日 14:03
  • 9281

LeetCode题解:Add Two Numbers

Add Two Numbers You are given two linked lists representing two non-negative numbers. The digit...
  • MagiSu
  • MagiSu
  • 2013年11月13日 13:50
  • 4578

【python】【leetcode】【算法题目2—Add Two Numbers】

【python】【leetcode】【算法题目2—Add Two Numbers】 题目原文: You are given two linked lists representing two non-...
  • u014615155
  • u014615155
  • 2016年11月21日 12:05
  • 1802

【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】

有两个单链表,代表两个非负数,每一个节点代表一个数位,数字是反向存储的,即第一个结点表示最低位,最后一个结点表示最高位。求两个数的相加和,并且以链表形式返回。对两个链表都从第一个开始处理,进行相加,结...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月16日 07:10
  • 5065

【leetcode】Add Two Numbers 解析以及拓展

题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r...
  • u013378502
  • u013378502
  • 2014年08月10日 10:19
  • 633

(LeetCode)算法题目——Add Two Numbers

Add Two Numbers
  • lh470342237
  • lh470342237
  • 2017年07月31日 22:47
  • 57

LeetCode刷题之第一题——Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in rever...
  • smilebluesky
  • smilebluesky
  • 2016年02月24日 21:41
  • 331

【Leetcode问题搬运翻译】Add two numbers

/** *本篇文章均为本人翻译,原问题链接:点击打开链接 */ 问题描述:你被给予两个非空链表,分别代表两个非负整数。这些数字以倒序的方式存储并且他们的每个节点都包含一个数字。添加两个数...
  • HeyWeCome
  • HeyWeCome
  • 2017年08月10日 10:50
  • 276

Add Two Numbers问题及解法

问题描述: You are given two non-empty linked lists representing two non-negative integers. The digits...
  • u011809767
  • u011809767
  • 2017年02月16日 09:17
  • 487
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode][2]Add Two Numbers解析 -Java实现
举报原因:
原因补充:

(最多只允许输入30个字)