標籤:blog etc 技巧 結果 com 更新 菜鳥 sum 指標
近期準備抽出一點時間,刷一些題防止手生,畢竟codemonkey,吃飯的手藝不能忘。
-------------------------------------------------分割線----------------------------------------------------------
簡單記錄下解題時的想法和遇到的坑,如果能堅持下來以後可能還會整理整理,sasa。
1,用鏈表計算計算加法 Add Two Numbers
對於科班出身的人對物件導向的概念都很簡單,然而在實際的編程中,由於封裝的原因,要考慮到各種奇葩的輸入,防止你的程式異常崩潰。
回到題目,例子中給的是342+465 =807;在最開始要考慮鏈表是否為空白的情況,在函數最開始進行判斷。然後依次相加進位,輸出結果。
注意:坑是在相加之後產生的進位可能會影響很多高位,例如1+999; 這種情況很容易被遺漏;
技巧:
對於本菜鳥來說,開始的時候在初始化隊列頭部時寫的麻煩了。單獨對頭部進行相加之後才進入迴圈,因為直接進入迴圈處理不好執行個體化ListNode的時間。
然而在看過參考答案之後,為了不對頭部單獨進行判斷,可以設定無意義的head節點,最終返回的時候return head.next;
還可以通過判斷指標為空白的方法,將不一樣的長度的鏈表相加在一個while迴圈中計算,最後上代碼:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode p = l1, q = l2, curr = dummyHead; int carry = 0; while (p != null || q != null) { int x = (p != null) ? p.val : 0; int y = (q != null) ? q.val : 0; int sum = carry + x + y; carry = sum / 10; curr.next = new ListNode(sum % 10); curr = curr.next; if (p != null) p = p.next; if (q != null) q = q.next; } if (carry > 0) { curr.next = new ListNode(carry); } return dummyHead.next;}
LeetCode演算法題 菜鳥總結 持續更新中