力扣算法题第二题,两数相加算法题:
要求:
//给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
//如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
//您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
//示例:
//输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
//输出:7 -> 0 -> 8
//原因:342 + 465 = 807
先讲下思路,我一开始采用了数据形式去进行运算。
贴上代码:用最常规的判断去进行相加。
package com.zhm.test;
import java.util.Arrays;
/**
* @Author bige
* @Date: 2022/11/16 18:11
* @ApiNote:两数相加
*/
public class Leatcode_test2 {
//给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
//如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
//您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
//示例:
//输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
//输出:7 -> 0 -> 8
//原因:342 + 465 = 807
public static int[] addTwoNumbers(int[] l1, int[] l2) {
//测试数据:[1,2,3] [1,9,9]
//int[] sun =new int[5];
int[] sun =new int[l1.length];
//想法和思路
//1.个位相加>10则向10位
if((l1[l1.length-1]+l2[l2.length-1])>10){
sun[l1.length-1] =l1[l1.length-1]+l2[l2.length-1]-10;
//2.十位相加+1
if((l1[l1.length-2]+l2[l2.length-2]+1)>10){
//十位进位
sun[l1.length-2] =l1[l1.length-2]+l2[l2.length-2]+1-10;
//3.百位相加,默认百位不进位
sun[l1.length-3] =l1[l1.length-3]+l2[l2.length-3]+1;
}else{
//个位进位,十位不进位,默认百位不进位
sun[l1.length-2] =l1[l1.length-2]+l2[l2.length-2]+1;
//十位不进位,默认百位不进位
sun[l1.length-3] =l1[l1.length-3]+l2[l2.length-3];
}
}else {
//1.1 否则个位相加不进位,只考虑相加在3位数以内
sun[l1.length] =l1[l1.length]+l2[l2.length];
//2.十位相加
if((l1[l1.length-2]+l2[l2.length-2]+1)>10){
//个位不进位,十位进位
sun[l1.length-2] =l1[l1.length-2]+l2[l2.length-2]-10;
//3.百位相加,默认百位不进位
sun[l1.length-3] =l1[l1.length-3]+l2[l2.length-3]+1;
}else{
//个位不进位,十位不进位,默认百位不进位
sun[l1.length-1] =l1[l1.length-1]+l2[l2.length-1];
//十位不进位,默认百位不进位
sun[l1.length-2] =l1[l1.length-2]+l2[l2.length-2];
}
}
//2.十位相加>10则向百位+1
return sun;
}
public static void main(String[] args) {
int[] l1={1,2,3};
int[] l2={1,9,9};
int[] result = addTwoNumbers(l1,l2);
System.out.println(Arrays.toString(result));
}
}
运算结果:
后来仔细看了下题目要求,是采用了ListNode类型,其实就类似于linkedList集合去使用。