1. 程式人生 > >leetcode刷題總結 1-100

leetcode刷題總結 1-100

leetcode

1Two Sum

維護2個指標即可

2Add Two Numbers

類似於大數相加

3Longest Substring Without Repeating Characters

找最長的不出現重複字元的子串,維護2個指標滑動即可。

4Median of Two Sorted Arrays

找2個有序陣列的中位數

5Longest Palindromic Substring

找最長的迴文子串,列舉i,然後向兩邊擴充套件

6ZigZag Conversion

模擬題

7Reverse Integer

水題

8String to Integer (atoi)

模擬題,字串轉成整數

9Palindrome Number

確定一個數是否是迴文數

10. Regular Expression Matching

判定正則表示式是否匹配,只有*和.的情況

11. Container With Most Water

好題 也是維護2個指標向中間移動,移動的那個肯定是短的

12Integer to Roman

數字轉羅馬錶達

13Roman to Integer

羅馬字元表達轉數字

14Longest Common Prefix

找一堆字串的最長公共字首,網上的都是暴利,可以用字典樹,構造最後一個字串的時候,一邊構造,一邊判斷節點的大小是否等於字串數

153Sum

a+b+c=0 => a+b=-c 排序 如果數字比較小的話用x[n]=1表示有n這個數,

排序,2個迴圈遍歷a,b,然後二分或者x[-(a+b)] 是否存在確定第三個數 複雜度n^2longn

迴圈第一個 然後 從剩下的兩邊往中間壓,複雜度n^2

163Sum Closest

a+b+c=x => a+b=x-c

最low的就是三個for迴圈,好一點的就是2個for迴圈,在二分第三個x-c最接近的,複雜度n^2logn

還是確定第一個,另外兩個從兩端往中間壓 n^2複雜度

17Letter Combinations of a Phone Number

水題

184Sum

類似於3sum

19Remove Nth Node From End of List

刪除連結串列倒數第n個節點,快慢指標,可以先移動n步做個差。

20Valid Parentheses

水題

21Merge Two Sorted Lists

水題,合併2個有序列表

22Generate Parentheses

n對括號有多少種表達的方式 遞迴一下

23Merge k Sorted Lists

堆維護每個連結串列的頭元素,或者兩兩歸併,複雜度loknk

24Swap Nodes in Pairs

兩兩互動連結串列的節點,也是基本操作

25Reverse Nodes in k-Group

連結串列每k個反轉

26Remove Duplicates from Sorted Array

刪除排序陣列重複的元素

27Remove Element

水題

28Implement strStr()

kmp

29. Divide Two Integers

好題,模擬除法,不能用取模,乘法,除法

30. Substring with Concatenation of All Words

求主串包含所有子串的起點和終點,子串長度都是相等的

31. Next Permutation

求下一個排列,找一下規律看看

32. Longest Valid Parentheses

好題啊 dp和棧都能解

33Search in Rotated Sorted Array

一個有序的陣列 分成了2段 求一個數 可以二分

34Search for a Range

找目標數字 起點和終點 二分

35Search Insert Position

有序陣列找目標數字 二分

36Valid Sudoku

驗證九宮格是否合法

37. Sudoku Solver

數獨 求解,遞迴 或者 舞蹈鏈 dance link

38Count and Say

暴利模擬

39Combination Sum

題意是求和假期加起來等於s的所有組合,數字可以用無數次

網上很多都是暴力遞迴+剪枝,剪枝無非是

1排序,過濾掉比s大的 2 查詢到 >= s的情況下直接返回 因為是排序後的,接下來搜尋的結果肯定至少大於等於的,答案也不能重複,所以剪枝

複雜度應該是2^n 

40Combination Sum II

相對於上一題 數字只能使用一次

41. First Missing Positive

好題啊,求第一個不存在的正數,時間複雜度要求n,空間複雜度要求常數 用a[i]表示i+1

42. Trapping Rain Water

好題,最大儲水量,對於每一個點,記錄左邊和右邊的最大值,可以一邊滑動一邊求左右最大值,不需要申請n空間記錄每一個

43Multiply Strings

大數相乘

44. Wildcard Matching

判斷正則表示式是否匹配,有?和*2種情況

45Jump Game II

陣列每個元素表示你最大能跳幾步,求最少幾步調到終點,開始在陣列第一個位置,貪心即可

46Permutations

求全排列,遞迴即可,非遞迴還沒有研究

47Permutations II

求全排列,有重複的數字,遞迴的時候特殊處理一下

48Rotate Image

將一個n*n的陣列順時針旋轉90度

49Group Anagrams

將字串分組,eat tea為一組,字串雜湊

50Pow(x, n)

快速冪

51N-Queens

n皇后問題

52N-Queens II

n皇后問題

53Maximum Subarray

求和最大的子序列

54Spiral Matrix

n*m矩陣,螺旋狀列印

55Jump Game

陣列每個元素表示你最大能跳幾步,求是否能跳到終點,開始在陣列第一個位置,貪心即可 參考45題

56Merge Intervals

將區間合併 1,3 2,5 合併成1,5 排序處理即可 貪心

57Insert Interval

給你一些不重疊的區間 現在加入合併一個區間

58Length of Last Word

求最後一個單詞的長度 水題

59Spiral Matrix II

螺旋列印n*n陣列

60. Permutation Sequence

求第k個全排列

61Rotate List

連結串列斷開在連線

62Unique Paths

求從左上角到右下角的方案數 dp或者c(n+m,n)組合數

63Unique Paths II

相對於62題多了障礙物,只能dp了

64Minimum Path Sum

求左上角到右下角和最小的路徑,dp

65Valid Number

模擬題,驗證一個字串是不是數字

66Plus One

數字+1

67Add Binary

模擬2進位制加法

68Text Justification

字串分成l個字元每行,填充空格 模擬題

69. Sqrt(x)

開根號,只取整數,網上有二分和牛頓迭代法

70Climbing Stairs

斐波那契數列

71Simplify Path

簡化字串 "/a/./b/../../c/", => "/c" 模擬

72Edit Distance

編輯距離 dp n^2

73Set Matrix Zeroes

一個矩陣 如果某個元素是0,將該行該列都置零

74Search a 2D Matrix

在一個行都遞增的矩陣裡面查詢一個數是否存在,下一行第一個比上一行最後一個大

那不就是全遞增的嗎,二分

75Sort Colors

就0,1,2 3種數字排序

76Minimum Window Substring

滑動視窗,在s中找到最短的包含t的字串

77Combinations

n,k 求包含k個數字的組合數 遞迴

78Subsets

求不重複數集的所有子集 遞迴

79. Word Search

求字串是否存在 搜尋

80Remove Duplicates from Sorted Array II

刪除重複數字 最多隻能出現2次

81Search in Rotated Sorted Array II

一個有序的陣列 分成了2段 求一個數 可以二分 同33 只不過 有重複數字

82Remove Duplicates from Sorted List II

將有序連結串列中的重複數字全部刪除

83Remove Duplicates from Sorted List

和上一題相比 區別就是 一樣的只留下一份

84Largest Rectangle in Histogram

單調佇列 dp

85Maximal Rectangle

最大全1子矩陣 dp

86Partition List

給一個連結串列,將小於值x的結點放到所有大於等於值x的結點的前面,不要改變結點之間的順序

注意邊界處理

87. Scramble String

區間dp 或者從小的往大的推

判斷isScramble(s11,s21)&&isScramble(s12,s22)或者isScramble(s12,s21)&&isScramble(s11,s22)

88Merge Sorted Array

合併2個有序陣列

89. Gray Code

求格雷碼,構造題

90. Subsets II

求不重複的子集,遞迴的時候判斷一下如果和前面的一樣 跳過即可

91Decode Ways

dp 求字串的解碼數,比如12 可以是AB 也可以是L

92Reverse Linked List II

部分連結串列反轉

93Restore IP Addresses

分隔ip地址,遞迴加上三個點,每段判斷一下即可

94Binary Tree Inorder Traversal

中序遍歷二叉樹,非遞迴方法

95Unique Binary Search Trees II

求1-n組成的二叉索引樹數量 每個點都可以作為根 遞迴 左邊比根小1-i到1右邊比根大i+1到n

96. Unique Binary Search Trees

這題和上題一樣,但是是求數量 可以用卡特蘭樹

97Interleaving String

s3是否是s1和s2交錯合併成的 dp

98Validate Binary Search Tree

驗證是否是二叉樹,中序遍歷是有序的,可以利用94題的非遞迴方法

99. Recover Binary Search Tree

恢復二叉索引樹,可以使用中序遍歷的時候作比較

100Same Tree

2棵樹是否相等