你須要的LeeCode題No.02——「兩數相加」_一點課堂(多岸學院)

兩數相加

題目:兩數相加java

描述:描述:給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。若是咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。git

示例:github

  • 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
  • 輸出:7 -> 0 -> 8
  • 緣由:342 + 465 = 807

解析

這個題目相對基礎不少,就是兩個單鏈表的處理,咱們只要注意進位便可。不過咱們要處理好幾種特殊狀況:ide

  1. 當兩個鏈表爲 (4 -> 5) 和 (4 -> 5) 時,由於進位緣由,因此結果爲 (8 -> 0 -> 1)
  2. 當兩個鏈表爲 (4 -> 4) 和 (4 -> 5 -> 1) 時,由於兩個鏈表長度不一樣,因此結果爲 (8 -> 9 -> 1)

只要注意處理好以上問題,其它都是常規操做,一塊兒看下參考代碼吧:學習

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    // 用來標記返回結果的頭結點,增長一個無效結點可使代碼簡單
    ListNode result = new ListNode(-1);

    // 記錄當前位置的值
    int cur = 0;
    // 進位標誌
    int identify = 0;
    // 用另外一個結點來構建鏈表,這樣就不會丟失頭結點指針了
    ListNode resultHandle = result;

    // 避免長度不一致
    while (l1!=null || l2!=null){
        int a = l1!=null?l1.val:0;
        int b = l2!=null?l2.val:0;
        // 計算當前值
        cur = a + b + identify;
        // 更新進位標誌
        identify = cur/10;
        // 更新當前值
        cur %= 10;
        
        // 當前值存入鏈表
        resultHandle.next = new ListNode(cur);
        if(l1!=null){
            l1 = l1.next;
        }
        if(l2!=null){
            l2 = l2.next;
        }
        resultHandle = resultHandle.next;
    }
    
    // 注意進位
    if(identify!=0){
        resultHandle.next = new ListNode(identify);
    }

    // 去除無效頭結點
    return result.next;
}

總結

好了,本次題目就是這麼簡單,主要在於細緻,處理好各類邊界問題就好。之後我會對題目進行適當的篩選,儘可能分享一些可以給咱們啓發的題目。不過所有的題目都會上傳到個人github。指針

下題預告

題目:無重複字符的最長子串code

描述:給定一個字符串,請你找出其中不含有重複字符的最長子串的長度。blog

示例:圖片

  • 輸入: "abcabcbb"
  • 輸出: 3
  • 解釋: 由於無重複字符的最長子串是 "abc",因此其長度爲 3。

相關源碼請加QQ獲取。資源


【感謝您能看完,若是可以幫到您,麻煩點個贊~】

更多經驗技術歡迎前來共同窗習交流: 一點課堂-爲夢想而奮鬥的在線學習平臺 http://www.yidiankt.com/

![關注公衆號,回覆「1」免費領取-【java核心知識點】] file

QQ討論羣:616683098

QQ:3184402434

想要深刻學習的同窗們能夠加我QQ一塊兒學習討論~還有全套資源分享,經驗探討,等你哦! 在這裏插入圖片描述

相關文章
相關標籤/搜索