LeetCode题库整理【Java】—— 2 两数相加
LeetCode題庫整理【Java】
2.兩數(shù)相加
題目:給出兩個(gè) 非空 的鏈表用來表示兩個(gè)非負(fù)的整數(shù)。其中,它們各自的位數(shù)是按照 逆序 的方式存儲(chǔ)的,并且它們的每個(gè)節(jié)點(diǎn)只能存儲(chǔ) 一位 數(shù)字。
如果,我們將這兩個(gè)數(shù)相加起來,則會(huì)返回一個(gè)新的鏈表來表示它們的和。
您可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開頭。
示例1:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
示例2:
輸入:(9) + (1 -> 9-> 9-> 9-> 9-> 9 -> 9)
輸出:1 -> 0 -> 0
原因:9 + 9999991 = 10000000
在自己的電腦軟件上做測(cè)試時(shí),可以將ListNode類寫為內(nèi)部類,在public ListNode addTwoNumbers(ListNode l1,ListNode l2) { }方法體中補(bǔ)全代碼,在主函數(shù)main()入口中輸入鏈表l1和l2的內(nèi)容并生成鏈表,并將輸出結(jié)果l3的內(nèi)容打印出來。
完整的Java測(cè)試代碼如下:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/ package leet.code;import java.util.Scanner;public class AddTwoNumbers {@SuppressWarnings("resource")public static void main(String[] args) {// TODO Auto-generated method stubAddTwoNumbers add = new AddTwoNumbers(); AddTwoNumbers.ListNode head1 = add.new ListNode(0);AddTwoNumbers.ListNode l1=head1;AddTwoNumbers.ListNode head2 = add.new ListNode(0);AddTwoNumbers.ListNode l2=head2;AddTwoNumbers.ListNode head3 = add.new ListNode(0);Scanner sc = new Scanner(System.in);//在控制臺(tái)輸入鏈表l1各個(gè)節(jié)點(diǎn)的值,以逗號(hào)隔開String str1 = sc.nextLine();String[] num1 = str1.split(",");//用逗號(hào)隔開int[] num1int = new int[num1.length];for(int i=0;i<num1int.length;i++) {num1int[i] = Integer.parseInt(num1[i]);l1.next = add.new ListNode(num1int[i]);l1 = l1.next;} head1 = head1.next;//在控制臺(tái)輸入鏈表l2各個(gè)節(jié)點(diǎn)的值,以逗號(hào)隔開String str2 = sc.nextLine();String[] num2 = str2.split(",");//用逗號(hào)隔開int[] num2int = new int[num2.length];for(int i=0;i<num2int.length;i++) {num2int[i] = Integer.parseInt(num2[i]);l2.next = add.new ListNode(num2int[i]);l2 = l2.next;}head2 = head2.next;head3 = add.addTwoNumbers(head1, head2);while(head3!=null) {System.out.println(head3.val); head3=head3.next;}}public class ListNode { //建立內(nèi)部類ListNodeint val;ListNode next;ListNode() {}ListNode(int val) { this.val = val; }ListNode(int val, ListNode next) { this.val = val; this.next = next; }}public ListNode addTwoNumbers(ListNode l1,ListNode l2) {ListNode head1 = l1;ListNode head2 = l2;ListNode head3 = new ListNode(0);ListNode result =head3;//進(jìn)位標(biāo)志boolean flag = false;while(head1!=null || head2!=null) {//獲取對(duì)應(yīng)位置的值然后相加int x = (head1!=null) ? head1.val : 0;int y = (head2!=null) ? head2.val : 0;int sum = flag ? x+y+1 : x+y;//判斷是否有新的進(jìn)位if( (sum/10) != 0) {sum %= 10;flag = true;}elseflag = false;//新增節(jié)點(diǎn)result.next = new ListNode(sum % 10);result = result.next;if (head1 != null)head1 = head1.next;if (head2 != null)head2 = head2.next; }//處理最后一位相加之后的進(jìn)位if(flag)result.next=new ListNode(1);return head3.next;} }
參考網(wǎng)址:https://www.cnblogs.com/mfrank/p/10472639.html
該文章中還給出了很多人可能會(huì)踩坑的解題思路,并且給出了代碼,也寫得很有趣
總結(jié)
以上是生活随笔為你收集整理的LeetCode题库整理【Java】—— 2 两数相加的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一款轻量级的消息提示插件 —— toas
- 下一篇: java美元兑换,(Java实现) 美元