複雜度
時間複雜度 o(n)
空間複雜度 o(n) 遞迴棧空間
思路
從末尾到首位,對兩個單鏈表每一位數字對齊相加,再將結果用單鏈表表示出來即可。
技巧在於如何處理不同長度的數字,以及進製和最高位的判斷。這裡對於不同長度的數字,我們通過將較短的數字補0來保證每一位都能相加。
遞迴寫法的思路比較直接,即判斷該輪遞迴中兩個listnode是否為null。
全部為null時,返回進製值
有乙個為null時,返回不為null的那個listnode和進製相加的值
都不為null時,返回兩個listnode和進製相加的值
/**
* definition for singly-linked list.
* struct listnode
* };
*/public
class
solution
public listnode* helper(listnode* l1, listnode* l2, int carry)
//有乙個為null時,返回不為null的那個listnode和進製相加的值
if(l1==null && l2!=null)
if(l2==null && l1!=null)
//都不為null時,返回兩個listnode和進製相加的值
int sum = l1.val + l2.val + carry;
//cur為該計算位,計算和結果可能》10,所以需要取模值
listnode cur = new listnode(sum % 10);
//將計算和結果的數返回到該位的下一位,儲存到carry進製值中,留給下次遞迴使用
cur.next = helper(l1.next, l2.next, sum / 10);
//返回cur的頭指標
return cur;}}
思路:
建立兩個棧s1、s2,其中乙個棧(s1)只管壓棧資料,另乙個棧(s2)出資料。所以問題就好解決了!需要考慮的就是什麼時候從s2出棧。兩種情況:
1.當s2為空棧時,需要將s1的資料全部倒過來,然後出棧s2。
2.當s2不為空棧時,直接從s2出棧。
最後從s2出的資料就是滿足後進先出(佇列)的特性。
//佇列的pop刪除元素
int pop()
x = stack2.top();
stack2.pop();
}else
//stack2不為空時,直接彈出stack2的棧頂元素
return x;
} private:
stack
stack1;
stack
stack2;
}
面試 每日一題(7)
寫程式,寫 是在面試中必不可少的環節,你要拿題,上機寫出 好了,你可能不知道其中有多少的 貓膩 是吧,夥計。別人我讀不告訴他。一 你要讀懂題,懂得題意,要讓你實現什麼功能,看看題目的要求。二 如果是演算法題,在腦海中想演算法的思想,在紙上寫出偽 一般公司的面試演算法題,無非就是那幾道,沒有更深的,當...
7 力扣每日一題
比較簡單,直接上 採用輔助棧 我們需要儲存最新的最小值,同時能夠儲存上個最小值以及上上個最小值.符合filo 先進後出,後進先出 原則,所以我們也同樣用棧來記錄最小值 class minstack void push int x void pop int top int getmin your mi...
每日一題 1
題目詳情 peter喜歡玩數字遊戲,但數獨這樣的遊戲對他來說太簡單了,於是他準備玩乙個難的遊戲。遊戲規則是在乙個n n的 裡填數,規則 對於每個輸入的n,從左上角開始,總是以對角線為起點,先橫著填,再豎著填。這裡給了一些樣例,請在樣例中找到規律並把這個n n的 列印出來吧。輸入描述 多組測試資料 資...