LeetCode刷題筆記

2021-10-06 09:44:36 字數 3272 閱讀 5642

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

整體思路:將長度較短的鍊錶在末尾補零使得兩個鍊錶長度相等,再乙個乙個進行元素的相加(考慮進製)

具體步驟:

獲取兩個鍊錶的長度

在較短的鍊錶末尾補零

對齊相加考慮進製

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

//獲取l2的長度

while

(q->next !=

null

)//l1較長,在l2末尾補0

if(len1 > len2)

}//l2較長,在l1末尾補0

else

}//重新定位到煉表頭

p = l1;

q = l2;

bool count =

false

;//記錄進製

listnode* l3 =

newlistnode(-

1);//存放鍊錶的指標,此時l3為頭結點

listnode* w = l3;

//l3的移動指標

int i =0;

//計算相加結果

while

(p !=

null

&& q !=

null)if

(count)

//如果最後還有進製

return l3-

>next;

//返回l3鍊錶第乙個元素所在的結點}}

;

整體思路:不對齊補零,若煉表不為空則用sum(代表每個位上相加的結果)加上,考慮進製。

原始碼:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

if(l2 !=

null

)//判斷是否進製

if(carry)

//取結果的一位數字

h->next =

newlistnode

(sum %10)

;//更新移動指標

h = h-

>next;

//記錄進製情況

carry = sum >=10?

true

:false;}

if(carry)

return head-

>next;}}

;

難度:簡單

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。

示例 1:

輸入: 123

輸出: 321

示例 2:

輸入: -123

輸出: -321

示例 3:

輸入: 120

輸出: 21

注意:假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。

class

solution

return res;}}

;

難度:簡單

判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

示例 1:

輸入: 121

輸出: true

示例 2:

輸入: -121

輸出: false

解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是乙個回文數。

示例 3:

輸入: 10

輸出: false

解釋: 從右向左讀, 為 01 。因此它不是乙個回文數。

高階:你能不將整數轉為字串來解決這個問題嗎?

執行用時:12 ms

記憶體消耗:5.8 mb

演算法思路:

1.首先排除負數以及0兩種情況

2.定義乙個long res儲存反轉後的結果,因為int可以儲存2^32-1內的數,反轉後可能會溢位

3.將res與x比較得出結果。

class

solution

return x == res;}}

;

執行用時:24 ms

記憶體消耗:6.3 mb

演算法思路:

1.將x轉換成字串

2.將字串進行反轉

3.定義istringstream,將字串寫入long

4.比較得出結果

class

solution

};

執行用時:20 ms

記憶體消耗:6 mb

演算法思路:

1.將x的後半部分進行反轉,並儲存起來

2.數字個數為偶數和奇數兩種情況,比較得出結果

class

solution

return midrev == x || midrev /

10== x;

//數字個數分為偶數和奇數兩種情況}}

;

執行用時:12 ms

記憶體消耗:6 mb

演算法思路:

將x的後半部分反轉後與前半部分進行比較。

1.x為個位數,返回true

2.x為負數或x的個位數為0,返回false

3.x數字個數為偶數,比較val == x

4. x數字個數為奇數,比較 val/10 == x

class

solution

return

(val == x)

||(val /

10== x)

;//數字個數分為偶數和奇數兩種情況}}

;

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...

leetcode刷題筆記

兩個陣列的交集 兩個陣列的交集 ii class solution return ans 排序加雙指標 按奇偶排序陣列 ii class solution int temp a i a i a j a j temp return a 對偶數索引進行排序,當發現偶數索引出現奇數時,在奇數索引上尋找第乙...