Two Sum:
思路1:先看第一個元素和後面的元素有無和為所需整數,在看第二個元素和後面元素,一次類推,直到最後兩個元素
思路2:所需整數減去第一個元素後,在數組中find是否有相等的值,減去第二個元素後
Palindrome Number:
思路1:将 int 轉換為 string ,使用下标操作 string,依次判斷開頭和結尾的數字是否相同
思路2:将 int 翻轉過來,判斷和原始的是否相同
int 轉 string 為 string s =to_string(x)
Reverse Integer:
将一個32位的 int 型數字颠倒
思路1:将 int 翻轉過來,注意符号,可以先取絕對值,再翻轉,之後添加符号,注意翻轉後可能會出現超出範圍,是以翻轉後的中間值使用 long型
思路2:轉化為string,然後颠倒
32位 int 的範圍為 [ -pow(2,31) ,pow(2,31)-1]
Roman to Integer:
将一個羅馬數字變成阿拉伯數字
思路:周遊所有的羅馬數字加起來,然後判斷特定的幾種情況,減去 double 的1,10或者100
Longest Comman Prefix:
思路:設定一個中間變量,存儲最長字首,每次循環用這個中間變量和 string 元素做比較,不同就break,更新result,使得result等于中間變量
Valiad Parentheses:
有效括号
思路:将括号按順序 push 到 vector 中,碰到後括号判斷前一個是否比對,比對的話将 vector pop_back,注意判斷前括号多,後括号多或者第一個就是後括号的情況
string的每一個元素都是字元 char
Merge Two Sorted Lists
思路:按順序比較每一個節點,對每一個節點設定正确的 next 指針,将兩個連結清單連接配接成一個連結清單,最後傳回 頭節點
連結清單都是按節點操作
Remove Duplicates from Sorted Array
思路:判斷容器目前元素和下一個元素是否相同,不同的話就删除目前元素,注意容器使用 erase 函數會使容器的疊代器失效,在容器中删除或者添加元素都會使容器的疊代器失效。但是 erase 傳回下一個元素的疊代器是正常的,可以使用,疊代器失效會報錯,可能導緻記憶體洩漏
Remove Element
思路:類似于上面一題,判斷目前元素是否是等于需要删除的值,如果是,使用 erase 函數,注意疊代器就好
Implement strStr()
判斷字元串中是否有目标字元串
思路:先定位string 目前元素是否等于目标字元串的第一個值,如果相等,進入内循環,判斷目前元素之後的值,是否和目标字元串後面的相等,如果不等使用 break 跳出内循環
Climbing Stairs
遞歸方法
class Solution {
public:
int climbStairs(int n) {
int result=;
if(n== ) return ;
else if(n==) return ;
else{
result = climbStairs(n-)+climbStairs(n-);
}
return result;
}
};
會産生很多分支,時間很慢
動态規矩填表法
class Solution {
public:
int climbStairs(int n) {
vector<int> result(n);
result[]=;
result[]=;
for(int i=;i<n;i++){
result[i]=result[i-]+result[i-];
}
return result[n-];
}
};
或者隻定義兩個值,更新這兩個中間值
Longest Palindromic Substring
思路一:分兩種情況,第一種,周遊檢查aba 型的回文,再周遊檢查 abba型回文
思路二:遇到重複的值,跨過去,标記收尾,之後從重複的首尾,分别減加,判斷是否相同,周遊一遍就可以
String to Integer (atoi)
考慮多種情況
有空格的情況,符号的情況,數字越界的情況,無效輸入的情況
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVPJ5WZ2Z0VhRDazwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYvwFd4VGdvwlMvw1ayFWbyVGdhd3PzYjMzQDMwADOxQDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
Container With Most Water
思路一:兩個循環周遊所有的元素,複雜度為O(N2)
思路二:左右兩邊同時逼近,移動高度小的那邊直到重合
證明:移動高的那邊,長度變小,高度變高,面積變小,高度變低,面積變小,隻有移動低的面積有可能會變大,是以每次移動低的
Integer to Roman
思路:根據羅馬數字的規律,從左到右排列,比如 MMM,代表3000,是以隻需要将[1000,900,500,400,100,90,50,40,10,9,5,4,1] 按順序排好,然後依次将目标值和清單中的值比較,實用貪心算法,每次選擇能表示的最大值,然後将字元連起來
貪心算法的步驟如下
Greedy(C) //C是問題的輸入集合即候選集合
{
S={ }; //初始解集合為空集
while (not solution(S)) //集合S沒有構成問題的一個解
{
x=select(C); //在候選集合C中做貪心選擇
if feasible(S, x) //推斷集合S中增加x後的解是否可行
S=S+{x};
C=C-{x};
}
return S;
}