LeetCode题库整理【Java】—— 2 两数相加
生活随笔
收集整理的這篇文章主要介紹了
LeetCode题库整理【Java】—— 2 两数相加
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
LeetCode題庫整理【Java】
2.兩數相加
題目:給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,并且它們的每個節點只能存儲 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 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
在自己的電腦軟件上做測試時,可以將ListNode類寫為內部類,在public ListNode addTwoNumbers(ListNode l1,ListNode l2) { }方法體中補全代碼,在主函數main()入口中輸入鏈表l1和l2的內容并生成鏈表,并將輸出結果l3的內容打印出來。
完整的Java測試代碼如下:
/*** 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);//在控制臺輸入鏈表l1各個節點的值,以逗號隔開String str1 = sc.nextLine();String[] num1 = str1.split(",");//用逗號隔開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;//在控制臺輸入鏈表l2各個節點的值,以逗號隔開String str2 = sc.nextLine();String[] num2 = str2.split(",");//用逗號隔開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 { //建立內部類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;//進位標志boolean flag = false;while(head1!=null || head2!=null) {//獲取對應位置的值然后相加int x = (head1!=null) ? head1.val : 0;int y = (head2!=null) ? head2.val : 0;int sum = flag ? x+y+1 : x+y;//判斷是否有新的進位if( (sum/10) != 0) {sum %= 10;flag = true;}elseflag = false;//新增節點result.next = new ListNode(sum % 10);result = result.next;if (head1 != null)head1 = head1.next;if (head2 != null)head2 = head2.next; }//處理最后一位相加之后的進位if(flag)result.next=new ListNode(1);return head3.next;} }
參考網址:https://www.cnblogs.com/mfrank/p/10472639.html
該文章中還給出了很多人可能會踩坑的解題思路,并且給出了代碼,也寫得很有趣
總結
以上是生活随笔為你收集整理的LeetCode题库整理【Java】—— 2 两数相加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一款轻量级的消息提示插件 —— toas
- 下一篇: 计算机2013知识,【2013年计算机基