給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 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 對偶數索引進行排序,當發現偶數索引出現奇數時,在奇數索引上尋找第乙...