每日一題(7)

2021-08-22 14:50:35 字數 1647 閱讀 9633

複雜度

時間複雜度 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的 列印出來吧。輸入描述 多組測試資料 資...