leetcode — add-two-numbers
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* Source : https://oj.leetcode.com/problems/add-two-numbers/
*
* Created by lverpeng on 2017/6/23.
*
* 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
*
*/
public class AddTwoNumbers {
/**
* 问题就是求两个数的和,只不过这两个数分别存在两个链表中,低位在前,高位在后,求出的和也存在链表中
* 循环较长的那个链表:
* 如果是当前有个链表都有值,则将两个数与上次计算的商(也就是进位)求和,结果的对于10的余数存于结果链表对一个的位置,结果对于10的商保存在变量中(也就是进位),
* 如果已经超过了其中一个链表的长度,则直接把另一个链表的数存入结果链表
*
* @param num1
* @param num2
* @return
*/
public List<Integer> addTwoNumbers (List<Integer> num1, List<Integer> num2) {
List<Integer> numbers = new ArrayList<Integer>();
int size = 0;
if (num1.size() > num2.size()) {
size = num1.size();
} else {
size = num2.size();
}
int carry = 0;
int sum = 0;
for (int i = 0; i < size; i++) {
if (num1.size() > i && num2.size() > i) {
sum = carry + num1.get(i) + num2.get(i);
} else if (num1.size() - 1 > i) {
sum = carry + num1.get(i);
} else {
sum = carry + num2.get(i);
}
numbers.add(sum % 10);
carry = sum / 10;
}
if (carry > 0) {
numbers.add(carry);
}
return numbers;
}
public List<Integer> addTwoNumbersRefactor (List<Integer> num1, List<Integer> num2) {
List<Integer> result = new ArrayList<Integer>();
int size = num1.size() > num2.size() ? num1.size() : num2.size();
int carry = 0;
int sum = 0;
for (int i = 0; i < size; i++) {
sum = carry + getNumber(num1, i) + getNumber(num2, i);
carry = sum / 10;
result.add(sum % 10);
}
if (carry > 0) {
result.add(carry);
}
return result;
}
private int getNumber(List<Integer> numbers, int i) {
if (i < 0 || i >= numbers.size()) {
return 0;
}
return numbers.get(i);
}
public static void main(String[] args) {
AddTwoNumbers addTwoNumbers = new AddTwoNumbers();
List<Integer> num1 = new ArrayList<Integer>(){{
add(2);
add(4);
add(3);
}};
List<Integer> num2 = new ArrayList<Integer>(){{
add(5);
add(6);
add(4);
}};
System.out.println(addTwoNumbers.addTwoNumbers(num1, num2));
System.out.println(addTwoNumbers.addTwoNumbersRefactor(num1, num2));
}
}
leetcode — add-two-numbers的更多相关文章
- [LeetCode] Add Two Numbers II 两个数字相加之二
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- [LeetCode] Add Two Numbers 两个数字相加
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- LeetCode Add Two Numbers II
原题链接在这里:https://leetcode.com/problems/add-two-numbers-ii/ 题目: You are given two linked lists represe ...
- LeetCode: Add Two Numbers 解题报告
Add Two NumbersYou are given two linked lists representing two non-negative numbers. The digits are ...
- Leetcode:Add Two Numbers分析和实现
Add Two Numbers这个问题的意思是,提供两条链表,每条链表表示一个十进制整数,其每一位对应链表的一个结点.比如345表示为链表5->4->3.而我们需要做的就是将两条链表代表的 ...
- [LeetCode] Add Two Numbers题解
Add Two Numbers: You are given two non-empty linked lists representing two non-negative integers. Th ...
- [Leetcode] Add two numbers 两数之和
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- [LeetCode] Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- LeetCode——Add Two Numbers
Question:You are given two linked lists representing two non-negative numbers. The digits are stored ...
- [LeetCode] Add Two Numbers 链表
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
随机推荐
- CentOS7 下使用root免密码输入自动登入gnome桌面
如果系统默认启动图形界面: vi /etc/gdm/custom.conf #找到[daemon],修改为下面的 [daemon] AutomaticLoginEnable=true Automati ...
- 3.Redis高级功能
3.Redis高级功能3.1 慢查询分析3.1.1 慢查询的两个配置参数3.1.2 最佳实践3.1.3 单线程架构3.2 Redis Shell3.2.1 redis-cli 详解3.2.2 redi ...
- Matplotlib 基本用法
1.基础应用 >>> import matplotlib.pyplot as plt >>> import numpy as np #使用np.linspace定义 ...
- Django之URL(路由系统)用法
路由系统 路由系统概念 简而言之,路由系统就是路径和视图函数的一个对应关系.django的路由系统作用就是使views里面处理数据的函数与请求的url建立映射关系.使请求到来之后,根据urls.py里 ...
- linux学习第九天 (Linux就该这么学)
今天讲了raid0 至少两块盘串联在一起,读写性能提升,但不具备数据备份和错误修复能力,RAID1把两块盘绑定,在写入数据时,同时写入到多块硬盘设备,raid5推荐使用,10推荐使用 LVM,今天是 ...
- 字符编码中ASCII、Unicode和UTF-8的区别
1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte). ...
- font-smoothing使用后字体看起来会更清晰舒服
CSS3里面加入了一个“-webkit-font-smoothing”属性. 这个属性可以使页面上的字体抗锯齿,使用后字体看起来会更清晰舒服. 加上之后就顿时感觉页面小清晰了. 淘宝也在用哦! 它有三 ...
- CDH版本的hadoop下载
http://archive.cloudera.com/cdh5/cdh/5/加要下载的cdh版本插件 例如: http://archive.cloudera.com/cdh5/cdh/5/zooke ...
- 隔行变色---简单的css js控制table隔行变色
(1)用expression 鼠标滑过变色: <style type="text/css"><!-- table { background-color:#0000 ...
- shell脚本学习-变量
跟着RUNOOB网站的教程学习的笔记 shell变量 shell变量的命名 定义变量时,变量名不加美元符号($,PHP语言中需要),如: name="runoob" 注意,变量名与 ...