小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

BAT面試算法進階(2)-兩數(shù)相加

 長沙7喜 2018-08-19


一.算法題


  • 題目

    

    You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

    You may assume the two numbers do not contain any leading zero, except the number 0 itself.

  • 案例

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


二.解決方案

    題目大意:給定2個非空鏈表來表示2個非負整數(shù).位數(shù)按照逆序方式存儲,它們的每個節(jié)點只存儲單個數(shù)字,將兩數(shù)相加返回一個新的鏈表.你可以假設(shè)除了數(shù)字0之外,這2個數(shù)字都不會以零開頭.


三.思路

    我們使用變量來跟蹤進位,并從包含最低有效位的表頭開始模擬逐位相加的過程.


四.算法

    就如同小學(xué)數(shù)學(xué)計算2個數(shù)相加一般,我們首先從低位有效位計算,也就是L1,L2的表頭第一個位置開始相加.我們進行的十進制相加,所以當計算的結(jié)果大于9時,就會造成'溢出'的現(xiàn)象.例如5+7=12.此時,我們就會把當前為的值設(shè)置為2,但是溢出的位需要進位.那么則用carry存儲,carry = 1.帶入到下一次迭代計算中.進位的carry必定是0或者1.2個數(shù)累加,需要考慮進位問題.則采用一個變量來保存進位值.


五.偽代碼    

  • 將當前的節(jié)點初始化為返回列表的啞節(jié)點

  • 將進行carry設(shè)置為0

  • p,q分別指向鏈表L1,L2的頭部

  • 遍歷鏈表L1,L2直到尾部

    • x設(shè)為節(jié)點的p值,如果p已經(jīng)到達L1的末端,則將其值設(shè)置為0

    • y設(shè)置為節(jié)點q值,如果q已經(jīng)到達L2的末端,則將其值設(shè)置為0

    • 求和 sum = x+y+carry;

    • 更新進位carry = sum/10

    • 創(chuàng)建一個新節(jié)點,將其設(shè)置為下一個節(jié)點,并將當前節(jié)點移動到下一個節(jié)點

    • 同時將p,q移動到下一個節(jié)點位 

  • 檢查carry是否等于1,如果等于1則往列表中追加數(shù)字1到新節(jié)點中

  • 返回啞節(jié)點的下一個節(jié)點


六.復(fù)雜度分析

  • 時間復(fù)雜度: O(max(m,n)),假設(shè)m,n分別表示L1,L2長度.上面的算法最多重復(fù)max(m,n)

  • 空間復(fù)雜度:O(max(m,n)), 新列表的長度最多max(m,n)+1


七.參考代碼

    

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多