LeetCode
(soulmachine@gmail.com)
https://github.com/soulmachine/leetcode
2016-1-28
Creative Commons
3.0 Unported
?iiT,ff+`2iBp2+QKKQMbXQ`;fHB+2Mb2bf#v@M+@bfjXyf
(cc by-nc-sa)
ACM
LeetCode Online Judge(http://leetcode.com/onlinejudge)
C++ 11
LeetCode Online Judge
:
OJ
.h
Shorter is better
.cpp
STL
malloc()/new
nullptr
C++
GitHub
GitHub
https://github.com/soulmachine/leetcode
http://q.weibo.com/1312378
http://book.douban.com/subject/2024655/
Algorithms
Robert Sedgewick, Addison-Wesley Professional, http://book.douban.com/subject/4854123/
Java
2.1
. . . . . . . . . . . . . . .
2.1.1
Remove
Duplicates
from Sorted Array . . .
2.1.2
Remove
Search
in
Search
in
2.1.5
Longest
Consecutive
8
2.1.7
Two Sum . . . . . . . .
10
2.1.8
3Sum . . . . . . . . . . 12
2.1.9
3Sum Closest . . . . . .
35
2.1.22 Candy . . . . . . . . . .
36
2.1.23 Single Number . . . . .
37
2.1.24 Single Number II . . . .
38
. . . . . . . . . . . . .
40
2.2.1
Add Two Numbers . . .
40
2.2.2
Reverse Linked List II .
41
2.2.3
Partition List . . . . . .
42
2.2.4
Remove
2.2.5
Sequence . . . . . . . .
2.1.21 Gas Station . . . . . . .
Duplicates
from Sorted List . . . .
Median of Two Sorted
Arrays . . . . . . . . . .
2.1.6
Rotated
Sorted Array II . . . . .
33
2.2
Rotated
Sorted Array . . . . . .
2.1.4
Duplicates
from Sorted Array II . .
2.1.3
2.1.20 Set Matrix Zeroes . . . .
13
Remove
43
Duplicates
from Sorted List II . . .
44
2.2.6
Rotate List . . . . . . .
46
2.2.7
Remove
Nth
Node
From End of List . . . .
47
2.2.8
Swap Nodes in Pairs . .
47
2.2.9
Reverse Nodes in k-Group 49
2.2.10 Copy List with Random
2.1.10 4Sum . . . . . . . . . . 14
2.1.11 Remove Element . . . . 18
2.1.12 Next Permutation . . . . 19
2.1.13 Permutation Sequence . 21
Pointer . . . . . . . . .
50
2.2.11 Linked List Cycle . . . .
51
2.2.12 Linked List Cycle II . .
52
2.2.13 Reorder List . . . . . .
53
2.2.14 LRU Cache . . . . . . .
55
2.1.14 Valid Sudoku . . . . . .
23
2.1.15 Trapping Rain Water . .
24
2.1.16 Rotate Image . . . . . .
27
2.1.17 Plus One . . . . . . . .
28
3.1
Valid Palindrome . . . . . . . .
57
2.1.18 Climbing Stairs . . . . . 30
3.2
Implement strStr() . . . . . . . .
58
2.1.19 Gray Code . . . . . . .
3.3
String to Integer (atoi) . . . . .
60
31
ii
57
iii
3.4
Add Binary . . . . . . . . . . .
61
3.5
Longest Palindromic Substring . 62
3.6
Regular Expression Matching . .
66
3.7
Wildcard Matching . . . . . . .
67
3.8
Longest Common Prefix . . . . 69
3.9
Valid Number . . . . . . . . . . 70
5.1.5
Binary Tree Level Order Traversal II . . . . .
5.1.6
Binary
Tree
Zigzag
Level Order Traversal .
5.1.7
94
96
Recover Binary Search
Tree . . . . . . . . . . .
98
99
3.10 Integer to Roman . . . . . . . .
72
5.1.8
Same Tree . . . . . . .
3.11 Roman to Integer . . . . . . . .
73
5.1.9
Symmetric Tree . . . . . 100
3.12 Count and Say . . . . . . . . . . 74
5.1.10 Balanced Binary Tree . . 102
3.13 Anagrams . . . . . . . . . . . .
5.1.11 Flatten Binary Tree to
75
Linked List . . . . . . . 103
3.14 Simplify Path . . . . . . . . . . 76
3.15 Length of Last Word . . . . . .
77
79
4.1
. . . . . . . . . . . . . . . .
5.1.12 Populating Next Right
Pointers in Each Node II 105
5.2
. . . . . . . . . 106
5.2.1
79
Construct Binary Tree
4.1.1
Valid Parentheses . . . . 79
from Preorder and In-
4.1.2
Longest Valid Paren-
order Traversal . . . . . 106
5.2.2
theses . . . . . . . . . . 80
4.1.3
4.1.4
torder Traversal . . . . . 107
82
5.3
Evaluate Reverse Polish Notation . . . . . . .
4.2
from Inorder and Pos-
Largest Rectangle in
Histogram . . . . . . . .
. . . . . . . . . . . 108
5.3.1
84
5.3.2
86
5.1
5.1.2
5.3.4
Convert Sorted Array to
Tree . . . . . . . . . . . 111
86
Binary Search Tree . . . 112
88
5.3.5
Binary Tree Postorder
Traversal . . . . . . . .
5.1.4
Validate Binary Search
Binary Tree Inorder
Traversal . . . . . . . .
5.1.3
5.3.3
Binary Tree Preorder
Traversal . . . . . . . .
Convert Sorted List to
Binary Search Tree . . . 113
90
Binary Tree Level Order Traversal . . . . . .
Unique Binary Search
Trees II . . . . . . . . . 110
. . . . . . . . . 86
5.1.1
Unique Binary Search
Trees . . . . . . . . . . 108
. . . . . . . . . . . . . . . 85
Construct Binary Tree
5.4
. . . . . . . . . 114
5.4.1
92
Minimum Depth of Binary Tree . . . . . . . . 115
iv
5.4.2
Maximum Depth of Bi-
8.3.2
next_permu-
nary Tree . . . . . . . . 116
tation() . . . . . . . . . 142
8.3.3
5.4.3
Path Sum . . . . . . . . 117
5.4.4
Path Sum II . . . . . . . 118
5.4.5
Binary Tree Maximum
8.4.1
Path Sum . . . . . . . . 119
8.4.2
5.4.6
8.4
next_permutation() . . . 144
next_permutation() . . . . . . . . . 144
8.4.3
8.5
Sum Root to Leaf Numbers . . . . . . . . . . . 121
Permutations II . . . . . . . . . 144
Populating Next Right
Pointers in Each Node . 120
5.4.7
. . . . . . . . . . 143
123
8.6
. . . . . . . . . . 144
Combinations . . . . . . . . . . 146
8.5.1
. . . . . . . . . . 146
8.5.2
. . . . . . . . . . 147
Letter Combinations of a Phone
6.1
Merge Sorted Array . . . . . . . 123
Number . . . . . . . . . . . . . 147
6.2
Merge Two Sorted Lists . . . . . 124
8.6.1
. . . . . . . . . . 148
6.3
Merge k Sorted Lists . . . . . . 124
8.6.2
. . . . . . . . . . 149
6.4
Insertion Sort List . . . . . . . . 125
6.5
Sort List . . . . . . . . . . . . . 126
6.6
First Missing Positive . . . . . . 127
6.7
Sort Colors . . . . . . . . . . . 128
131
7.1
Search for a Range . . . . . . . 131
7.2
Search Insert Position . . . . . . 132
7.3
Search a 2D Matrix . . . . . . . 133
8
8.1
8.2
8.3
135
Subsets . . . . . . . . . . . . . 135
150
9.1
Word Ladder . . . . . . . . . . 150
9.2
Word Ladder II . . . . . . . . . 154
9.3
Surrounded Regions . . . . . . . 162
9.4
. . . . . . . . . . . . . . . 164
9.4.1
. . . . . . . . 164
9.4.2
. . . . . . 164
9.4.3
. . . . . . . . 165
10
173
10.1 Palindrome Partitioning . . . . . 173
10.2 Unique Paths . . . . . . . . . . 176
8.1.1
. . . . . . . . . . 135
10.2.1
8.1.2
. . . . . . . . . . 137
10.2.2
. . . . . . . . 176
Subsets II . . . . . . . . . . . . 138
10.2.3
. . . . . . . . . . 177
8.2.1
. . . . . . . . . . 138
10.2.4
. . . . . . . . 178
8.2.2
. . . . . . . . . . 141
. . . . . . . . . . 176
10.3 Unique Paths II . . . . . . . . . 179
Permutations . . . . . . . . . . 142
10.3.1
. . . . . . . . 179
8.3.1
10.3.2
. . . . . . . . . . 180
next_permutation() . . . 142
v
10.4 N-Queens . . . . . . . . . . . . 181
13.4 Maximal Rectangle . . . . . . . 213
10.5 N-Queens II . . . . . . . . . . . 184
13.5 Best Time to Buy and Sell Stock
10.6 Restore IP Addresses . . . . . . 186
III . . . . . . . . . . . . . . . . 214
10.7 Combination Sum . . . . . . . . 188
13.6 Interleaving String . . . . . . . 215
10.8 Combination Sum II . . . . . . 189
13.7 Scramble String . . . . . . . . . 217
10.9 Generate Parentheses . . . . . . 190
13.8 Minimum Path Sum . . . . . . . 222
10.10 Sudoku Solver . . . . . . . . . 192
13.9 Edit Distance . . . . . . . . . . 224
10.11 Word Search . . . . . . . . . . 193
13.10 Decode Ways . . . . . . . . . 226
10.12
. . . . . . . . . . . . . . 195
13.11 Distinct Subsequences . . . . . 227
10.12.1
. . . . . . . 195
13.12 Word Break . . . . . . . . . . 228
10.12.2
. . . . . . 195
13.13 Word Break II . . . . . . . . . 230
10.12.3
. . . . . . . 197
10.12.4
. 197
10.12.5
. . 197
11
199
11.1 Pow(x,n) . . . . . . . . . . . . . 199
11.2 Sqrt(x) . . . . . . . . . . . . . . 200
14
232
14.1 Clone Graph . . . . . . . . . . . 232
15
235
15.1 Reverse Integer . . . . . . . . . 235
15.2 Palindrome Number . . . . . . . 236
15.3 Insert Interval . . . . . . . . . . 237
201
15.4 Merge Intervals . . . . . . . . . 238
12.1 Jump Game . . . . . . . . . . . 201
15.5 Minimum Window Substring . . 239
12.2 Jump Game II . . . . . . . . . . 202
15.6 Multiply Strings . . . . . . . . . 241
12.3 Best Time to Buy and Sell Stock 204
15.7 Substring with Concatenation
12
12.4 Best Time to Buy and Sell Stock II205
of All Words . . . . . . . . . . . 244
15.8 Pascals Triangle . . . . . . . . 245
12.5 Longest Substring Without Repeating Characters . . . . . . . 206
15.9 Pascals Triangle II . . . . . . . 246
12.6 Container With Most Water . . . 207
15.10 Spiral Matrix . . . . . . . . . . 247
13
209
15.12 ZigZag Conversion . . . . . . 250
13.1 Triangle . . . . . . . . . . . . . 209
15.13 Divide Two Integers . . . . . . 251
13.2 Maximum Subarray . . . . . . . 210
15.14 Text Justification . . . . . . . . 253
13.3 Palindrome Partitioning II . . . 212
15.15 Max Points on a Line . . . . . 255
15.11 Spiral Matrix II . . . . . . . . . 248
vi
44#
7#bU@#V
R2@N
t W k 54 y
t W k 44 R
+?`
+?`
mMbB;M2/ BMi
mMbB;M2/ +?`
STL
vector
C++
Effective STL
string
p2+iQ`
new
delete
delete
new
BMi
`v 4 M2r BMi (`QrnMmK)c
7Q`UBMi B 4 yc B I `QrnMmKc YYBV
`v(B) 4 M2r BMi(+QHnMmK)c
vector
p2+iQ`Ip2+iQ`IBMi= = `vU`QrnMmK- p2+iQ`IBMi=U+QHnMmK- yVVc
reserve
BUG
2.1
2.1.1 Remove Duplicates from Sorted Array
Given a sorted array, remove the duplicates in place such that each element appear only once
and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example, Given input array 4 (R-R-k),
Your function should return length = 2, and A is now (R-k).
1
ff G22i*Q/2- _2KQp2 .mTHB+i2b 7`QK aQ`i2/ ``v
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi `2KQp2.mTHB+i2bUp2+iQ`IBMi= MmKbV &
B7 UMmKbX2KTivUVV `2im`M yc
'c
'
BMi BM/2t 4 yc
7Q` UBMi B 4 Rc B I MmKbXbBx2UVc BYYV &
B7 UMmKb(BM/2t) 54 MmKb(B)V
MmKb(YYBM/2t) 4 MmKb(B)c
'
`2im`M BM/2t Y Rc
2.1
2
ff G22i*Q/2- _2KQp2 .mTHB+i2b 7`QK aQ`i2/ ``v
ff
ahG
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi `2KQp2.mTHB+i2bUp2+iQ`IBMi= MmKbV &
`2im`M /BbiM+2UMmKbX#2;BMUV- mMB[m2UMmKbX#2;BMUV- MmKbX2M/UVVVc
'
'c
ff G22i*Q/2- _2KQp2 .mTHB+i2b 7`QK aQ`i2/ ``v
ff
ahG
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi `2KQp2.mTHB+i2bUp2+iQ`IBMi= MmKbV &
`2im`M /BbiM+2UMmKbX#2;BMUV- `2KQp2.mTHB+i2bUMmKbX#2;BMUV- MmKbX2M/UV- MmKbX#2;BMUVV
'
i2KTHi2IivT2MK2 AMAi- ivT2MK2 PmiAi=
PmiAi `2KQp2.mTHB+i2bUAMAi 7B`bi- AMAi Hbi- PmiAi QmiTmiV &
r?BH2 U7B`bi 54 HbiV &
QmiTmiYY 4 7B`bic
7B`bi 4 mTT2`n#QmM/U7B`bi- Hbi- 7B`biVc
'
'c
'
`2im`M QmiTmic
Remove Duplicates from Sorted Array II
2.1.2
2.1.2 Remove Duplicates from Sorted Array II
Follow up for Remove Duplicates: What if duplicates are allowed at most twice?
For example, Given sorted array 4 (R-R-R-k-k-j),
Your function should return length = 5, and A is now (R-R-k-k-j)
hashmap
1
ff G22i*Q/2- _2KQp2 .mTHB+i2b 7`QK aQ`i2/ ``v AA
ff
PUMV
PURV
ff !mi?Q` ?2tRy3 U?iiTb,ff;Bi?m#X+QKf?2tRy3V
+Hbb aQHmiBQM &
Tm#HB+,
BMi `2KQp2.mTHB+i2bUp2+iQ`IBMi= MmKbV &
B7 UMmKbXbBx2UV I4 kV `2im`M MmKbXbBx2UVc
BMi BM/2t 4 kc
7Q` UBMi B 4 kc B I MmKbXbBx2UVc BYYV&
B7 UMmKb(B) 54 MmKb(BM/2t @ k)V
MmKb(BM/2tYY) 4 MmKb(B)c
'
'c
'
`2im`M BM/2tc
2
Q++m` I k
I j
Q++m`
ff G22i*Q/2- _2KQp2 .mTHB+i2b 7`QK aQ`i2/ ``v AA
ff !mi?Q`
U?iiT,ffr2B#QX+QKfmfReeeddNdk8V
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi `2KQp2.mTHB+i2bUp2+iQ`IBMi= MmKbV &
+QMbi BMi M 4 MmKbXbBx2UVc
BMi BM/2t 4 yc
7Q` UBMi B 4 yc B I Mc YYBV &
B7 UB = y B I M @ R MmKb(B) 44 MmKb(B @ R) MmKb(B) 44 MmKb(B Y R)V
+QMiBMm2c
'c
'
MmKb(BM/2tYY) 4 MmKb(B)c
'
`2im`M BM/2tc
Remove Duplicates from Sorted Array
2.1.1
2.1
2.1.3 Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., y R k 9 8 e d might become 9 8 e d y R k).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
ff G22i*Q/2- a2`+? BM _Qii2/ aQ`i2/ ``v
ff
PUHQ; MV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi b2`+?U+QMbi p2+iQ`IBMi= MmKb- BMi i`;2iV
BMi 7B`bi 4 y- Hbi 4 MmKbXbBx2UVc
r?BH2 U7B`bi 54 HbiV &
+QMbi BMi KB/ 4 7B`bi Y UHbi @ 7B`biV
B7 UMmKb(KB/) 44 i`;2iV
`2im`M KB/c
B7 UMmKb(7B`bi) I4 MmKb(KB/)V &
B7 UMmKb(7B`bi) I4 i`;2i i`;2i
Hbi 4 KB/c
2Hb2
7B`bi 4 KB/ Y Rc
' 2Hb2 &
B7 UMmKb(KB/) I i`;2i i`;2i I4
7B`bi 4 KB/ Y Rc
2Hb2
Hbi 4 KB/c
'
'
`2im`M @Rc
'
'c
Search in Rotated Sorted Array II
2.1.4
&
f kc
I MmKb(KB/)V
MmKb(Hbi@R)V
2.1.4 Search in Rotated Sorted Array II
Follow up for Search in Rotated Sorted Array: What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
(K)=4(H),
(H-K)
(R-j-R-R-R)
(K)=4(H)
(K)=(H)
(K)44(H)
(H-K)
HYY
ff G22i*Q/2- a2`+? BM _Qii2/ aQ`i2/ ``v AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH b2`+?U+QMbi p2+iQ`IBMi= MmKb- BMi i`;2iV &
BMi 7B`bi 4 y- Hbi 4 MmKbXbBx2UVc
r?BH2 U7B`bi 54 HbiV &
+QMbi BMi KB/ 4 7B`bi Y UHbi @ 7B`biV f kc
B7 UMmKb(KB/) 44 i`;2iV
`2im`M i`m2c
B7 UMmKb(7B`bi) I MmKb(KB/)V &
B7 UMmKb(7B`bi) I4 i`;2i i`;2i I MmKb(KB/)V
Hbi 4 KB/c
2Hb2
7B`bi 4 KB/ Y Rc
' 2Hb2 B7 UMmKb(7B`bi) = MmKb(KB/)V &
B7 UMmKb(KB/) I i`;2i i`;2i I4 MmKb(Hbi@R)V
7B`bi 4 KB/ Y Rc
2Hb2
Hbi 4 KB/c
' 2Hb2
ffbFBT /mTHB+i2 QM2
7B`biYYc
'
`2im`M 7Hb2c
'
'c
2.1
Search in Rotated Sorted Array
2.1.3
2.1.5 Median of Two Sorted Arrays
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted
arrays. The overall run time complexity should be O(log(m + n)).
k
merge
O(m + n)
k
T
m
merge sort
B
T"YY
O(1)
T"
TYY
A
KYY
KYY
O(k)
m+n
O(m + n)
k
k
A
k
A
k/2
k/2
"(Ffk@R)
(Ffk@R)
k/2
k
(Ffk@R) 44 "(Ffk@R)
(Ffk@R) = "(Ffk@R)
(Ffk@R) I "(Ffk@R)
(Ffk@R) I "(Ffk@R)
(Ffk@R)
A
B
(Ffk@R)
k
AB
top k
(Ffk@R) = "(Ffk@R)
k/2
k/2
(Ffk@R) 44 "(Ffk@R)
(y)
AB
(Ffk@R)
A
B
"(F@R)
(F@R)
F4R
KBMU(y)- "(y)V
(Ffk@R) 44 "(Ffk@R)
(Ffk@R)
"(Ffk@R)
"(Ffk@R)
ff G22i*Q/2- J2/BM Q7 hrQ aQ`i2/ ``vb
ff
PUHQ;UKYMVV
PUHQ;UKYMVV
+Hbb aQHmiBQM &
Tm#HB+,
/Qm#H2 7BM/J2/BMaQ`i2/``vbU+QMbi p2+iQ`IBMi= - +QMbi p2+iQ`IBMi= "V &
+QMbi BMi K 4 XbBx2UVc
+QMbi BMi M 4 "XbBx2UVc
BMi iQiH 4 K Y Mc
B7 UiQiH ytRV
`2im`M 7BM/nFi?UX#2;BMUV- K- "X#2;BMUV- M- iQiH f k Y RVc
2Hb2
`2im`M U7BM/nFi?UX#2;BMUV- K- "X#2;BMUV- M- iQiH f kV
Y 7BM/nFi?UX#2;BMUV- K- "X#2;BMUV- M- iQiH f k Y RVV f kXyc
'
T`Bpi2,
biiB+ BMi 7BM/nFi?Ubi/,,p2+iQ`IBMi=,,+QMbinBi2`iQ` - BMi Kbi/,,p2+iQ`IBMi=,,+QMbinBi2`iQ` "- BMi M- BMi FV &
ffHrvb bbmK2 i?i K Bb 2[mH Q` bKHH2` i?M M
B7 UK = MV `2im`M 7BM/nFi?U"- M- - K- FVc
B7 UK 44 yV `2im`M U" Y F @ RVc
B7 UF 44 RV `2im`M KBMU - "Vc
'
'c
ff/BpB/2 F BMiQ irQ T`ib
BMi B 4 KBMUF f k- KV- B# 4 F @ Bc
B7 U U Y B @ RV I U" Y B# @ RVV
`2im`M 7BM/nFi?U Y B- K @ B- "- M- F @ BVc
2Hb2 B7 U U Y B @ RV = U" Y B# @ RVV
`2im`M 7BM/nFi?U- K- " Y B#- M @ B#- F @ B#Vc
2Hb2
`2im`M (B @ R)c
2.1.6 Longest Consecutive Sequence
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example, Given (Ryy- 9- kyy- R- j- k), The longest consecutive elements sequence is (Rk- j- 9). Return its length: 4.
Your algorithm should run in O(n) complexity.
2.1
O(n log n)
O(n)
O(n)
mMQ`/2`2/nKTIBMi- #QQH= mb2/
ff G22i *Q/2- GQM;2bi *QMb2+miBp2 a2[m2M+2
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi HQM;2bi*QMb2+miBp2U+QMbi p2+iQ`IBMi= MmKbV &
mMQ`/2`2/nKTIBMi- #QQH= mb2/c
7Q` UmiQ B , MmKbV mb2/(B) 4 7Hb2c
BMi HQM;2bi 4 yc
7Q` UmiQ B , MmKbV &
B7 Umb2/(B)V +QMiBMm2c
BMi H2M;i? 4 Rc
mb2/(B) 4 i`m2c
7Q` UBMi D 4 B Y Rc mb2/X7BM/UDV 54 mb2/X2M/UVc YYDV &
mb2/(D) 4 i`m2c
YYH2M;i?c
'
7Q` UBMi D 4 B @ Rc mb2/X7BM/UDV 54 mb2/X2M/UVc @@DV &
mb2/(D) 4 i`m2c
YYH2M;i?c
'
'
'c
'
HQM;2bi 4 KtUHQM;2bi- H2M;i?Vc
`2im`M HQM;2bic
2
,
.
KTIBMi- BMi= KT
,
.
union,find
.
,
mMQ`/2`2/n@
?iiT,ff/Bb+mbbXH22i+Q/2X+QKf[m2biBQMbfRydyf
10
HQM;2bi@+QMb2+miBp2@b2[m2M+2
ff G22i *Q/2- GQM;2bi *QMb2+miBp2 a2[m2M+2
ff
PUMV
PUMV
ff mi?Q`, !/pM+2/tv
+Hbb aQHmiBQM &
Tm#HB+,
BMi HQM;2bi*QMb2+miBp2Up2+iQ`IBMi= MmKbV &
mMQ`/2`2/nKTIBMi- BMi= KTc
BMi bBx2 4 MmKbXbBx2UVc
BMi H 4 Rc
7Q` UBMi B 4 yc B I bBx2c BYYV &
B7 UKTX7BM/UMmKb(B)V 54 KTX2M/UVV +QMiBMm2c
KT(MmKb(B)) 4 Rc
B7 UKTX7BM/UMmKb(B) @ RV 54 KTX2M/UVV &
H 4 KtUH- K2`;2*Hmbi2`UKT- MmKb(B) @ R- MmKb(B)VVc
'
B7 UKTX7BM/UMmKb(B) Y RV 54 KTX2M/UVV &
H 4 KtUH- K2`;2*Hmbi2`UKT- MmKb(B)- MmKb(B) Y RVVc
'
'
`2im`M bBx2 44 y \ y , Hc
'
T`Bpi2,
BMi K2`;2*Hmbi2`UmMQ`/2`2/nKTIBMi- BMi= KT- BMi H27i- BMi `B;?iV &
BMi mTT2` 4 `B;?i Y KT(`B;?i) @ Rc
BMi HQr2` 4 H27i @ KT(H27i) Y Rc
BMi H2M;i? 4 mTT2` @ HQr2` Y Rc
KT(mTT2`) 4 H2M;i?c
KT(HQr2`) 4 H2M;i?c
`2im`M H2M;i?c
'
'c
2.1.7 Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where
index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not
zero-based.
11
2.1
You may assume that each input would have exactly one solution.
Input: MmK#2`b4&k- d- RR- R8'- i`;2i4N
Output: BM/2tR4R- BM/2tk4k
O(n2 )
1
2
hash
O(n).
O(n log n)
O(n)
O(n log n)
ffG22i*Q/2- hrQ amK
ff
k ?b?
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= irQamKUp2+iQ`IBMi= MmKb- BMi i`;2iV &
mMQ`/2`2/nKTIBMi- BMi= KTTBM;c
p2+iQ`IBMi= `2bmHic
7Q` UBMi B 4 yc B I MmKbXbBx2UVc BYYV &
KTTBM;(MmKb(B)) 4 Bc
'
7Q` UBMi B 4 yc B I MmKbXbBx2UVc BYYV &
+QMbi BMi ;T 4 i`;2i @ MmKb(B)c
B7 UKTTBM;X7BM/U;TV 54 KTTBM;X2M/UV KTTBM;(;T) = BV &
`2bmHiXTmb?n#+FUB Y RVc
`2bmHiXTmb?n#+FUKTTBM;(;T) Y RVc
#`2Fc
'
'
`2im`M `2bmHic
'
'c
3Sum,
2.1.8
3Sum Closest,
4Sum,
2.1.10
2.1.9
12
2.1.8 3Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique
triplets in the array which gives the sum of zero.
Note:
Elements in a triplet (a, b, c) must be in non-descending order. (ie, a b c)
The solution set must not contain duplicate triplets.
For example, given array a 4 &@R y R k @R @9'.
A solution set is:
U@R- y- RV
U@R- @R- kV
O(n2 )
k-sum
O(max{n log n, n
k1
})
k2
ff G22i*Q/2- jamK
ff
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi== i?`22amKUp2+iQ`IBMi= MmKbV &
p2+iQ`Ip2+iQ`IBMi== `2bmHic
B7 UMmKbXbBx2UV I jV `2im`M `2bmHic
bQ`iUMmKbX#2;BMUV- MmKbX2M/UVVc
+QMbi BMi i`;2i 4 yc
miQ Hbi 4 MmKbX2M/UVc
7Q` UmiQ B 4 MmKbX#2;BMUVc B I Hbi@kc YYBV &
miQ D 4 BYRc
B7 UB = MmKbX#2;BMUV B 44 UB@RVV +QMiBMm2c
miQ F 4 Hbi@Rc
r?BH2 UD I FV &
B7 U B Y D Y F I i`;2iV &
YYDc
r?BH2U D 44 UD @ RV D I FV YYDc
' 2Hb2 B7 U B Y D Y F = i`;2iV &
@@Fc
r?BH2U F 44 UF Y RV D I FV @@Fc
' 2Hb2 &
`2bmHiXTmb?n#+FU& B- D- F 'Vc
YYDc
PURV
13
2.1
@@Fc
r?BH2U D 44
'
'c
'
UD @ RV
F 44
UF Y RV D I FV YYDc
'
'
`2im`M `2bmHic
Two sum,
2.1.7
3Sum Closest,
4Sum,
2.1.9
2.1.10
2.1.9 3Sum Closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given number,
target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array a 4 &@R k R @9', and i`;2i 4 R.
The sum that is closest to the target is 2. (@R Y k Y R 4 k).
O(n2 )
ff G22i*Q/2- jamK *HQb2bi
ff
PUMkV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi i?`22amK*HQb2biUp2+iQ`IBMi= MmKb- BMi i`;2iV &
BMi `2bmHi 4 yc
BMi KBMn;T 4 ALhnJsc
bQ`iUMmKbX#2;BMUV- MmKbX2M/UVVc
7Q` UmiQ 4 MmKbX#2;BMUVc 54 T`2pUMmKbX2M/UV- kVc YYV &
miQ # 4 M2tiUVc
miQ + 4 T`2pUMmKbX2M/UVVc
r?BH2 U# I +V &
+QMbi BMi bmK 4 Y # Y +c
+QMbi BMi ;T 4 #bUbmK @ i`;2iVc
14
B7 U;T I KBMn;TV &
`2bmHi 4 bmKc
KBMn;T 4 ;Tc
'
'
'c
'
B7 UbmK I i`;2iV YY#c
2Hb2
@@+c
'
`2im`M `2bmHic
Two sum,
2.1.7
3Sum,
2.1.8
4Sum,
2.1.10
2.1.10 4Sum
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target?
Find all unique quadruplets in the array which gives the sum of target.
Note:
Elements in a quadruplet (a, b, c, d) must be in non-descending order. (ie, a b c d)
The solution set must not contain duplicate quadruplets.
For example, given array a 4 &R y @R y @k k', and i`;2i 4 y.
A solution set is:
U@R- y- y- RV
U@k- @R- R- kV
U@k- y- y- kV
O(n3 )
hashmap
O(n3 )
3Sum
15
2.1
ff G22i*Q/2- 9amK
ff
PUMjV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi== 7Qm`amKUp2+iQ`IBMi= MmKb- BMi i`;2iV &
p2+iQ`Ip2+iQ`IBMi== `2bmHic
B7 UMmKbXbBx2UV I 9V `2im`M `2bmHic
bQ`iUMmKbX#2;BMUV- MmKbX2M/UVVc
'c
'
miQ Hbi 4 MmKbX2M/UVc
7Q` UmiQ 4 MmKbX#2;BMUVc I T`2pUHbi- jVc YYV &
7Q` UmiQ # 4 M2tiUVc # I T`2pUHbi- kVc YY#V &
miQ + 4 M2tiU#Vc
miQ / 4 T`2pUHbiVc
r?BH2 U+ I /V &
B7 U Y # Y + Y / I i`;2iV &
YY+c
' 2Hb2 B7 U Y # Y + Y / = i`;2iV &
@@/c
' 2Hb2 &
`2bmHiXTmb?n#+FU& - #- +- / 'Vc
YY+c
@@/c
'
'
'
'
bQ`iU`2bmHiX#2;BMUV- `2bmHiX2M/UVVc
`2bmHiX2`b2UmMB[m2U`2bmHiX#2;BMUV- `2bmHiX2M/UVV- `2bmHiX2M/UVVc
`2im`M `2bmHic
map
ff G22i*Q/2- 9amK
ff
?b?KT
ff
PUMkV
PUM9V
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = 7Qm`amKUp2+iQ`IBMi= MmKb- BMi i`;2iV &
p2+iQ`Ip2+iQ`IBMi== `2bmHic
B7 UMmKbXbBx2UV I 9V `2im`M `2bmHic
bQ`iUMmKbX#2;BMUV- MmKbX2M/UVVc
mMQ`/2`2/nKTIBMi- p2+iQ`ITB`IBMi- BMi= = = ++?2c
7Q` UbBx2ni 4 yc I MmKbXbBx2UVc YYV &
7Q` UbBx2ni # 4 Y Rc # I MmKbXbBx2UVc YY#V &
++?2(MmKb() Y MmKb(#))XTmb?n#+FUTB`IBMi- BMi=U- #VVc
'
'
16
7Q` UBMi + 4 yc + I MmKbXbBx2UVc YY+V &
7Q` UbBx2ni / 4 + Y Rc / I MmKbXbBx2UVc YY/V &
+QMbi BMi F2v 4 i`;2i @ MmKb(+) @ MmKb(/)c
B7 U++?2X7BM/UF2vV 44 ++?2X2M/UVV +QMiBMm2c
+QMbi miQ p2+ 4 ++?2(F2v)c
7Q` UbBx2ni F 4 yc F I p2+XbBx2UVc YYFV &
B7 U+ I4 p2+(F)Xb2+QM/V
+QMiBMm2c ff
'
'c
'
'
`2bmHiXTmb?n#+FU & MmKb(p2+(F)X7B`bi)MmKb(p2+(F)Xb2+QM/)- MmKb(+)- MmKb(/) 'Vc
'
bQ`iU`2bmHiX#2;BMUV- `2bmHiX2M/UVVc
`2bmHiX2`b2UmMB[m2U`2bmHiX#2;BMUV- `2bmHiX2M/UVV- `2bmHiX2M/UVVc
`2im`M `2bmHic
multimap
ff G22i*Q/2- 9amK
ff
?b?KT
ff
PUMkV
PUMkV
ff !mi?Q`
U?iiT,ffr2B#QX+QKfHmM;QM;V
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi== 7Qm`amKUp2+iQ`IBMi= MmKb- BMi i`;2iV &
p2+iQ`Ip2+iQ`IBMi== `2bmHic
B7 UMmKbXbBx2UV I 9V `2im`M `2bmHic
bQ`iUMmKbX#2;BMUV- MmKbX2M/UVVc
mMQ`/2`2/nKmHiBKTIBMi- TB`IBMi- BMi== ++?2c
7Q` UBMi B 4 yc B Y R I MmKbXbBx2UVc YYBV
7Q` UBMi D 4 B Y Rc D I MmKbXbBx2UVc YYDV
++?2XBMb2`iUKF2nTB`UMmKb(B) Y MmKb(D)- KF2nTB`UB- DVVVc
7Q` UmiQ B 4 ++?2X#2;BMUVc B 54 ++?2X2M/UVc YYBV &
BMi t 4 i`;2i @ B@=7B`bic
miQ `M;2 4 ++?2X2[mHn`M;2UtVc
7Q` UmiQ D 4 `M;2X7B`bic D 54 `M;2Xb2+QM/c YYDV &
miQ 4 B@=b2+QM/X7B`bic
miQ # 4 B@=b2+QM/Xb2+QM/c
miQ + 4 D@=b2+QM/X7B`bic
miQ / 4 D@=b2+QM/Xb2+QM/c
B7 U 54 + 54 / # 54 + # 54 /V &
p2+iQ`IBMi= p2+ 4 & MmKb()- MmKb(#)- MmKb(+)- MmKb(/) 'c
bQ`iUp2+X#2;BMUV- p2+X2M/UVVc
`2bmHiXTmb?n#+FUp2+Vc
'
17
2.1
'c
'
'
'
bQ`iU`2bmHiX#2;BMUV- `2bmHiX2M/UVVc
`2bmHiX2`b2UmMB[m2U`2bmHiX#2;BMUV- `2bmHiX2M/UVV- `2bmHiX2M/UVVc
`2im`M `2bmHic
4
ff G22i*Q/2- 9amK
ff
PUMjHQ;MV
PURV
ff
R
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi== 7Qm`amKUp2+iQ`IBMi= MmKb- BMi i`;2iV &
p2+iQ`Ip2+iQ`IBMi== `2bmHic
B7 UMmKbXbBx2UV I 9V `2im`M `2bmHic
bQ`iUMmKbX#2;BMUV- MmKbX2M/UVVc
'c
'
miQ Hbi 4 MmKbX2M/UVc
7Q` UmiQ 4 MmKbX#2;BMUVc I T`2pUHbi- jVc
4 mTT2`n#QmM/U- T`2pUHbi- jV- VV &
7Q` UmiQ # 4 M2tiUVc # I T`2pUHbi- kVc
# 4 mTT2`n#QmM/U#- T`2pUHbi- kV- #VV &
miQ + 4 M2tiU#Vc
miQ / 4 T`2pUHbiVc
r?BH2 U+ I /V &
B7 U Y # Y + Y / I i`;2iV &
+ 4 mTT2`n#QmM/U+- /- +Vc
' 2Hb2 B7 U Y # Y + Y / = i`;2iV &
/ 4 T`2pUHQr2`n#QmM/U+- /- /VVc
' 2Hb2 &
`2bmHiXTmb?n#+FU& - #- +- / 'Vc
+ 4 mTT2`n#QmM/U+- /- +Vc
/ 4 T`2pUHQr2`n#QmM/U+- /- /VVc
'
'
'
'
`2im`M `2bmHic
Two sum,
3Sum,
2.1.7
2.1.8
3Sum Closest,
2.1.9
18
2.1.11 Remove Element
Given an array and a value, remove all instances of that value in place and return the new length.
The order of elements can be changed. It doesnt matter what you leave beyond the new length.
1
ff G22i*Q/2- _2KQp2 1H2K2Mi
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi `2KQp21H2K2MiUp2+iQ`IBMi= MmKb- BMi i`;2iV &
BMi BM/2t 4 yc
7Q` UBMi B 4 yc B I MmKbXbBx2UVc YYBV &
B7 UMmKb(B) 54 i`;2iV &
MmKb(BM/2tYY) 4 MmKb(B)c
'
'
`2im`M BM/2tc
'
'c
2
ff G22i*Q/2- _2KQp2 1H2K2Mi
ff
`2KQp2UV
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi `2KQp21H2K2MiUp2+iQ`IBMi= MmKb- BMi i`;2iV &
`2im`M /BbiM+2UMmKbX#2;BMUV- `2KQp2UMmKbX#2;BMUV- MmKbX2M/UV- i`;2iVVc
'
'c
19
2.1
2.1.12 Next Permutation
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).
The replacement must be in-place, do not allocate extra memory.
Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the
right-hand column.
R-k-j R-j-k
j-k-R R-k-j
R-R-8 R-8-R
2-1
http://sherlei.blogspot.com/2012/12/leetcode-next-permutation.html
2-1
20
ff G22i*Q/2- L2ti S2`KmiiBQM
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ M2tiS2`KmiiBQMUp2+iQ`IBMi= MmKbV &
M2tinT2`KmiiBQMUMmKbX#2;BMUV- MmKbX2M/UVVc
'
i2KTHi2IivT2MK2 "B/BAi=
#QQH M2tinT2`KmiiBQMU"B/BAi 7B`bi- "B/BAi HbiV &
ff :2i `2p2`b2/ `M;2 iQ bBKTHB7v `2p2`b2/ i`p2`bHX
+QMbi miQ `7B`bi 4 `2p2`b2nBi2`iQ`I"B/BAi=UHbiVc
+QMbi miQ `Hbi 4 `2p2`b2nBi2`iQ`I"B/BAi=U7B`biVc
ff "2;BM 7`QK i?2 b2+QM/ Hbi 2H2K2Mi iQ i?2 7B`bi 2H2K2MiX
miQ TBpQi 4 M2tiU`7B`biVc
ff 6BM/ <TBpQi<- r?B+? Bb i?2 7B`bi 2H2K2Mi i?i Bb MQ H2bb i?M Bib
ff bm++2bbQ`X <S`2p< Bb mb2/ bBM+2 <TBpQ`i< Bb <`2p2`b2/nBi2`iQ`<X
r?BH2 UTBpQi 54 `Hbi TBpQi =4 T`2pUTBpQiVV
YYTBpQic
ff LQ bm+? 2H2K2M2i 7QmM/- +m``2Mi b2[m2M+2 Bb H`2/v i?2 H`;2bi
ff T2`KmiiBQM- i?2M `2``M;2 iQ i?2 7B`bi T2`KmiiBQM M/ `2im`M 7Hb2X
B7 UTBpQi 44 `HbiV &
`2p2`b2U`7B`bi- `HbiVc
`2im`M 7Hb2c
'
ff a+M 7`QK `B;?i iQ H27i- 7BM/ i?2 7B`bi 2H2K2Mi i?i Bb ;`2i2` i?M
ff <TBpQi<X
miQ +?M;2 4 7BM/nB7U`7B`bi- TBpQi- #BM/RbiUH2bbIBMi=UV- TBpQiVVc
brTU +?M;2- TBpQiVc
`2p2`b2U`7B`bi- TBpQiVc
'c
'
`2im`M i`m2c
Permutation Sequence,
Permutations,
Permutations II,
Combinations,
8.3
8.4
8.5
2.1.13
21
2.1
2.1.13 Permutation Sequence
The set (R-k-j-
-M) contains a total of n! unique permutations.
By listing and labeling all of the permutations in order, We get the following sequence (ie, for n = 3):
]Rkj]
]Rjk]
]kRj]
]kjR]
]jRk]
]jkR]
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
M2tinT2`KmiiBQMUV
k1
n
a2 , a3 , ..., an ,
a1
a2 , a3 , ..., an
a1 = k/(n 1)!
a1 , a2 , a3 , ..., an
n1
k2
k%(n 1)!
a2
k2 /(n 2)!
kn1
kn2 %2!
an1
kn1 /1!
an
next_permutation()
ff G22i*Q/2- S2`KmiiBQM a2[m2M+2
ff
M2tinT2`KmiiBQMUV hG1
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; ;2iS2`KmiiBQMUBMi M- BMi FV &
bi`BM; bUM- ^y^Vc
7Q` UBMi B 4 yc B I Mc YYBV
n1
a1
(n 1)!
22
'
'c
b(B) Y4 BYRc
7Q` UBMi B 4 yc B I F@Rc YYBV
M2tinT2`KmiiBQMUbX#2;BMUV- bX2M/UVVc
`2im`M bc
i2KTHi2IivT2MK2 "B/BAi=
#QQH M2tinT2`KmiiBQMU"B/BAi 7B`bi- "B/BAi HbiV &
ff
L2ti S2`KmiiBQM
'
ff G22i*Q/2- S2`KmiiBQM a2[m2M+2
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; ;2iS2`KmiiBQMUBMi M- BMi FV &
bi`BM; bUM- ^y^Vc
bi`BM; `2bmHic
7Q` UBMi B 4 yc B I Mc YYBV
b(B) Y4 B Y Rc
`2im`M Fi?nT2`KmiiBQMUb- FVc
'
T`Bpi2,
BMi 7+iQ`BHUBMi MV &
BMi `2bmHi 4 Rc
7Q` UBMi B 4 Rc B I4 Mc YYBV
`2bmHi 4 Bc
`2im`M `2bmHic
'
ff b2[
i2KTHi2IivT2MK2 a2[m2M+2=
a2[m2M+2 Fi?nT2`KmiiBQMU+QMbi a2[m2M+2 b2[- BMi FV &
+QMbi BMi M 4 b2[XbBx2UVc
a2[m2M+2 aUb2[Vc
a2[m2M+2 `2bmHic
BMi #b2 4 7+iQ`BHUM @ RVc
@@Fc ff
y
7Q` UBMi B 4 M @ Rc B = yc F W4 #b2- #b2 f4 B- @@BV &
miQ 4 M2tiUaX#2;BMUV- F f #b2Vc
`2bmHiXTmb?n#+FU Vc
aX2`b2UVc
'
'
`2bmHiXTmb?n#+FUa(y)Vc ff
`2im`M `2bmHic
23
2.1
'c
Next Permutation,
Permutations,
2.1.12
8.3
Permutations II,
Combinations,
8.4
8.5
2.1.14 Valid Sudoku
Determine
if
Sudoku
is
valid,
according
to:
Sudoku
Puzzles
The
http://sudoku.com.au/TheRules.aspx .
The Sudoku board could be partially filled, where empty cells are filled with the character ^X^.
2-2 A partially filled sudoku which is valid
ff G22i*Q/2- oHB/ am/QFm
ff
PUMkV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BboHB/am/QFmU+QMbi p2+iQ`Ip2+iQ`I+?`== #Q`/V &
#QQH mb2/(N)c
Rules
24
7Q` UBMi B 4 yc B I Nc YYBV &
7BHHUmb2/- mb2/ Y N- 7Hb2Vc
7Q` UBMi D 4 yc D I Nc YYDV ff
B7 U5+?2+FU#Q`/(B)(D)- mb2/VV
`2im`M 7Hb2c
7BHHUmb2/- mb2/ Y N- 7Hb2Vc
'
7Q` UBMi D 4 yc D I Nc YYDV ff
B7 U5+?2+FU#Q`/(D)(B)- mb2/VV
`2im`M 7Hb2c
7Q` UBMi ` 4 yc ` I jc YY`V ff
N
7Q` UBMi + 4 yc + I jc YY+V &
7BHHUmb2/- mb2/ Y N- 7Hb2Vc
'
'
7Q` UBMi B 4 `
jc B I `
j Y jc YYBV
7Q` UBMi D 4 +
jc D I +
j Y jc YYDV
B7 U5+?2+FU#Q`/(B)(D)- mb2/VV
`2im`M 7Hb2c
`2im`M i`m2c
#QQH +?2+FU+?` +?- #QQH mb2/(N)V &
B7 U+? 44 ^X^V `2im`M i`m2c
B7 Umb2/(+? @ ^R^)V `2im`M 7Hb2c
'c
'
`2im`M mb2/(+? @ ^R^) 4 i`m2c
Sudoku Solver,
10.10
2.1.15 Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute
how much water it is able to trap after raining.
For example, Given (y-R-y-k-R-y-R-j-k-R-k-R), return 6.
25
2.1
2-3
Trapping Rain Water
KBMUKtnH27i- Ktn@
`B;?iV @ ?2B;?i
1.
2.
3.
1.
2.
3.
1
ff G22i*Q/2- h`TTBM; _BM qi2`
ff
R
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi i`TU+QMbi p2+iQ`IBMi= V &
+QMbi BMi M 4 XbBx2UVc
BMi KtnH27i 4 M2r BMi(M)UVc
BMi Ktn`B;?i 4 M2r BMi(M)UVc
7Q` UBMi B 4 Rc B I Mc BYYV &
KtnH27i(B) 4 KtUKtnH27i(B @ R)- (B @ R)Vc
Ktn`B;?i(M @ R @ B) 4 KtUKtn`B;?i(M @ B)- (M @ B)Vc
'
BMi bmK 4 yc
7Q` UBMi B 4 yc B I Mc BYYV &
26
'
'c
'
BMi ?2B;?i 4 KBMUKtnH27i(B)- Ktn`B;?i(B)Vc
B7 U?2B;?i = (B)V &
bmK Y4 ?2B;?i @ (B)c
'
/2H2i2() KtnH27ic
/2H2i2() Ktn`B;?ic
`2im`M bmKc
2
ff G22i*Q/2- h`TTBM; _BM qi2`
ff
k
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi i`TU+QMbi p2+iQ`IBMi= V &
+QMbi BMi M 4 XbBx2UVc
BMi Kt 4 yc ff
7Q` UBMi B 4 yc B I Mc BYYV
B7 U(B) = (Kt)V Kt 4 Bc
'c
'
BMi ri2` 4 yc
7Q` UBMi B 4 y- T2F 4 yc B I Ktc BYYV
B7 U(B) = T2FV T2F 4 (B)c
2Hb2 ri2` Y4 T2F @ (B)c
7Q` UBMi B 4 M @ R- iQT 4 yc B = Ktc B@@V
B7 U(B) = iQTV iQT 4 (B)c
2Hb2 ri2` Y4 iQT @ (B)c
`2im`M ri2`c
ff G22i*Q/2- h`TTBM; _BM qi2`
ff
ff
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi i`TU+QMbi p2+iQ`IBMi= V &
+QMbi BMi M 4 XbBx2UVc
bi+FITB`IBMi- BMi== bc
BMi ri2` 4 yc
7Q` UBMi B 4 yc B I Mc YYBV &
27
2.1
BMi ?2B;?i 4 yc
r?BH2 U5bX2KTivUVV & ff
BMi #` 4 bXiQTUVX7B`bic
BMi TQb 4 bXiQTUVXb2+QM/c
ff #`- ?2B;?i- (B)
ri2` Y4 UKBMU#`- (B)V @ ?2B;?iV
?2B;?i 4 #`c
'
'
'c
'
B7 U(B) I #`V ff
#`2Fc
2Hb2
bXTQTUVc ff
bXTmb?UKF2nTB`U(B)- BVVc
`2im`M ri2`c
Container With Most Water,
12.6
Largest Rectangle in Histogram,
4.1.3
2.1.16 Rotate Image
You are given an n n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up: Could you do this in-place?
2-4 Rotate Image
UB @ TQb @ RVc
28
1
ff G22i*Q/2- _Qii2 AK;2
ff
R
PUMkV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ `Qii2Up2+iQ`Ip2+iQ`IBMi== Ki`BtV &
+QMbi BMi M 4 Ki`BtXbBx2UVc
7Q` UBMi B 4 yc B I Mc YYBV ff
7Q` UBMi D 4 yc D I M @ Bc YYDV
brTUKi`Bt(B)(D)- Ki`Bt(M @ R @ D)(M @ R @ B)Vc
'
'c
7Q` UBMi B 4 yc B I M f kc YYBV ff
7Q` UBMi D 4 yc D I Mc YYDV
brTUKi`Bt(B)(D)- Ki`Bt(M @ R @ B)(D)Vc
2
ff G22i*Q/2- _Qii2 AK;2
ff
k
PUMkV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ `Qii2Up2+iQ`Ip2+iQ`IBMi== Ki`BtV &
+QMbi BMi M 4 Ki`BtXbBx2UVc
7Q` UBMi B 4 yc B I M f kc YYBV ff
7Q` UBMi D 4 yc D I Mc YYDV
brTUKi`Bt(B)(D)- Ki`Bt(M @ R @ B)(D)Vc
'
'c
7Q` UBMi B 4 yc B I Mc YYBV ff
7Q` UBMi D 4 B Y Rc D I Mc YYDV
brTUKi`Bt(B)(D)- Ki`Bt(D)(B)Vc
2.1.17 Plus One
Given a number represented as an array of digits, plus one to the number.
29
2.1
1
ff G22i*Q/2- SHmb PM2
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= THmbPM2Up2+iQ`IBMi= /B;BibV &
//U/B;Bib- RVc
`2im`M /B;Bibc
'
T`Bpi2,
ff y I4 /B;Bi I4 N
pQB/ //Up2+iQ`IBMi= /B;Bib- BMi /B;BiV &
BMi + 4 /B;Bic ff +``v7Q` UmiQ Bi 4 /B;BibX`#2;BMUVc Bi 54 /B;BibX`2M/UVc YYBiV &
Bi Y4 +c
+ 4 Bi f Ryc
Bi W4 Ryc
'
'c
'
B7 U+ = yV /B;BibXBMb2`iU/B;BibX#2;BMUV- RVc
2
ff G22i*Q/2- SHmb PM2
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= THmbPM2Up2+iQ`IBMi= /B;BibV &
//U/B;Bib- RVc
`2im`M /B;Bibc
'
T`Bpi2,
ff y I4 /B;Bi I4 N
pQB/ //Up2+iQ`IBMi= /B;Bib- BMi /B;BiV &
BMi + 4 /B;Bic ff +``v7Q`n2+?U/B;BibX`#2;BMUV- /B;BibX`2M/UV- (+)UBMi /V&
/ Y4 +c
+ 4 / f Ryc
/ W4 Ryc
'Vc
B7 U+ = yV /B;BibXBMb2`iU/B;BibX#2;BMUV- RVc
30
2
'
'c
2.1.18 Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
f (n)
n1
n1
n
1
2
f (n) = f (n 1) + f (n 2)
1
ff G22i*Q/2- *HBK#BM; aiB`b
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi +HBK#aiB`bUBMi MV &
BMi T`2p 4 yc
BMi +m` 4 Rc
7Q`UBMi B 4 Rc B I4 M c YYBV&
BMi iKT 4 +m`c
+m` Y4 T`2pc
T`2p 4 iKTc
'
`2im`M +m`c
'
'c
1
an =
5
!"
#n "
#n $
1+ 5
1 5
2
2
31
2.1
ff G22i*Q/2- *HBK#BM; aiB`b
ff
PURV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi +HBK#aiB`bUBMi MV &
+QMbi /Qm#H2 b 4 b[`iU8Vc
`2im`M 7HQQ`UUTQrUURYbVfk- MYRV Y TQrUUR@bVfk- MYRVVfb Y yX8Vc
'
'c
Decode Ways,
13.10
2.1.19 Gray Code
The gray code is a binary numeral system where two successive values differ in only one bit.
Given a non-negative integer n representing the total number of bits in the code, print the sequence of
gray code. A gray code sequence must begin with 0.
For example, given n = 2, return (y-R-j-k). Its gray code sequence is:
yy
yR
RR
Ry
@
@
@
@
y
R
j
k
Note:
For a given n, a gray code sequence is not uniquely defined.
For example, (y-k-j-R) is also a valid gray code sequence according to the above definition.
For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
http://en.wikipedia.org/wiki/Gray_code
(Gray Code)
g0 = b0 , gi = bi bi1
1001
1
0
4
0
3
1
3
2
0
1101
b0 = g0 , bi = gi bi1
2
1
32
1000
1
4
n
n1
2-5
1
1
2-5
The first few steps of the reflect-and-prefix method.
ff G22i*Q/2- :`v *Q/2
ff
PUkMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= ;`v*Q/2UBMi MV &
p2+iQ`IBMi= `2bmHic
+QMbi bBx2ni bBx2 4 R II Mc ff kM
`2bmHiX`2b2`p2UbBx2Vc
7Q` UbBx2ni B 4 yc B I bBx2c YYBV
`2bmHiXTmb?n#+FU#BM`vniQn;`vUBVVc
`2im`M `2bmHic
'
T`Bpi2,
biiB+ mMbB;M2/ BMi #BM`vniQn;`vUmMbB;M2/ BMi MV &
`2im`M M UM == RVc
'
'c
n (n/2)
0 2n 1
1
2
2
3
1111
n
33
2.1
Reflect-and-prefix method
ff G22i*Q/2- :`v *Q/2
ff `27H2+i@M/@T`27Bt K2i?Q/
ff
PUkMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= ;`v*Q/2UBMi MV &
p2+iQ`IBMi= `2bmHic
`2bmHiX`2b2`p2URIIMVc
`2bmHiXTmb?n#+FUyVc
7Q` UBMi B 4 yc B I Mc BYYV &
+QMbi BMi ?B;?2bin#Bi 4 R II Bc
7Q` UBMi D 4 `2bmHiXbBx2UV @ Rc D =4 yc D@@V ff
`2bmHiXTmb?n#+FU?B;?2bin#Bi % `2bmHi(D)Vc
'
`2im`M `2bmHic
'
'c
2.1.20 Set Matrix Zeroes
Given a m n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
Follow up: Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?
O(m + n)
bool
1
ff G22i*Q/2- a2i Ji`Bt w2`Q2b
ff
PUK MV
PUKYMV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ b2iw2`Q2bUp2+iQ`Ip2+iQ`IBMi= = Ki`BtV &
+QMbi bBx2ni K 4 Ki`BtXbBx2UVc
+QMbi bBx2ni M 4 Ki`Bt(y)XbBx2UVc
34
2
p2+iQ`I#QQH= `QrUK- 7Hb2Vc ff
p2+iQ`I#QQH= +QHUM- 7Hb2Vc ff
y
y
7Q` UbBx2ni B 4 yc B I Kc YYBV &
7Q` UbBx2ni D 4 yc D I Mc YYDV &
B7 UKi`Bt(B)(D) 44 yV &
`Qr(B) 4 +QH(D) 4 i`m2c
'
'
'
'c
'
7Q` UbBx2ni B 4 yc B I Kc YYBV &
B7 U`Qr(B)V
7BHHUKi`Bt(B)(y)- Ki`Bt(B)(y) Y M- yVc
'
7Q` UbBx2ni D 4 yc D I Mc YYDV &
B7 U+QH(D)V &
7Q` UbBx2ni B 4 yc B I Kc YYBV &
Ki`Bt(B)(D) 4 yc
'
'
'
2
ff G22i*Q/2- a2i Ji`Bt w2`Q2b
ff
PUK MV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ b2iw2`Q2bUp2+iQ`Ip2+iQ`IBMi= = Ki`BtV &
+QMbi bBx2ni K 4 Ki`BtXbBx2UVc
+QMbi bBx2ni M 4 Ki`Bt(y)XbBx2UVc
#QQH `Qrn?bnx2`Q 4 7Hb2c ff
#QQH +QHn?bnx2`Q 4 7Hb2c ff
7Q` UbBx2ni B 4 yc B I Mc BYYV
B7 UKi`Bt(y)(B) 44 yV &
`Qrn?bnx2`Q 4 i`m2c
#`2Fc
'
7Q` UbBx2ni B 4 yc B I Kc BYYV
B7 UKi`Bt(B)(y) 44 yV &
+QHn?bnx2`Q 4 i`m2c
#`2Fc
'
7Q` UbBx2ni B 4 Rc B I Kc BYYV
7Q` UbBx2ni D 4 Rc D I Mc DYYV
B7 UKi`Bt(B)(D) 44 yV &
Ki`Bt(y)(D) 4 yc
y
y
35
2.1
'
'c
Ki`Bt(B)(y) 4 yc
'
7Q` UbBx2ni B 4 Rc B I Kc BYYV
7Q` UbBx2ni D 4 Rc D I Mc DYYV
B7 UKi`Bt(B)(y) 44 y %% Ki`Bt(y)(D) 44 yV
Ki`Bt(B)(D) 4 yc
B7 U`Qrn?bnx2`QV
7Q` UbBx2ni B 4 yc B I Mc BYYV
Ki`Bt(y)(B) 4 yc
B7 U+QHn?bnx2`QV
7Q` UbBx2ni B 4 yc B I Kc BYYV
Ki`Bt(B)(y) 4 yc
2.1.21 Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is ;b(B).
You have a car with an unlimited gas tank and it costs +Qbi(B) of gas to travel from station i to its next
station (i+1). You begin the journey with an empty tank at one of the gas stations.
Return the starting gas stations index if you can travel around the circuit once, otherwise return -1.
Note: The solution is guaranteed to be unique.
O(N 2 )
O(N )
bmK
bmK
iQiH
-1
ff G22i*Q/2- :b aiiBQM
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi +M*QKTH2i2*B`+mBiUp2+iQ`IBMi= ;b- p2+iQ`IBMi= +QbiV &
BMi iQiH 4 yc
BMi D 4 @Rc
7Q` UBMi B 4 y- bmK 4 yc B I ;bXbBx2UVc YYBV &
bmK Y4 ;b(B) @ +Qbi(B)c
iQiH Y4 ;b(B) @ +Qbi(B)c
36
2
B7 UbmK I yV &
D 4 Bc
bmK 4 yc
'
'
'c
'
`2im`M iQiH =4 y \ D Y R , @Rc
2.1.22 Candy
There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
Each child must have at least one candy.
Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
ff G22i*Q/2- *M/v
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi +M/vUp2+iQ`IBMi= `iBM;bV &
+QMbi BMi M 4 `iBM;bXbBx2UVc
p2+iQ`IBMi= BM+`2K2MiUMVc
ff
7Q` UBMi B 4 R- BM+ 4 Rc B I Mc BYYV &
B7 U`iBM;b(B) = `iBM;b(B @ R)V
BM+`2K2Mi(B) 4 KtUBM+YY- BM+`2K2Mi(B)Vc
2Hb2
BM+ 4 Rc
'
7Q` UBMi B 4 M @ k- BM+ 4 Rc B =4 yc B@@V &
B7 U`iBM;b(B) = `iBM;b(B Y R)V
37
2.1
2Hb2
'
'c
BM+`2K2Mi(B) 4 KtUBM+YY- BM+`2K2Mi(B)Vc
BM+ 4 Rc
'
ff
M
`2im`M ++mKmHi2UBM+`2K2Mi(y)- BM+`2K2Mi(y)YM- MVc
ff G22i*Q/2- *M/v
ff
PUMV
PUMV
ff !mi?Q` 7M+vKQmb2 U?iiT,ffr2B#QX+QKfmfRNk3Rek3kkV
+Hbb aQHmiBQM &
Tm#HB+,
BMi +M/vU+QMbi p2+iQ`IBMi= `iBM;bV &
p2+iQ`IBMi= 7U`iBM;bXbBx2UVVc
BMi bmK 4 yc
7Q` UBMi B 4 yc B I `iBM;bXbBx2UVc YYBV
bmK Y4 bQHp2U`iBM;b- 7- BVc
`2im`M bmKc
'
BMi bQHp2U+QMbi p2+iQ`IBMi= `iBM;b- p2+iQ`IBMi=
B7 U7(B) 44 yV &
7(B) 4 Rc
B7 UB = y `iBM;b(B) = `iBM;b(B @ R)V
7(B) 4 KtU7(B)- bQHp2U`iBM;b- 7- B @
B7 UB I `iBM;bXbBx2UV @ R `iBM;b(B) =
7(B) 4 KtU7(B)- bQHp2U`iBM;b- 7- B Y
'
`2im`M 7(B)c
'
'c
7- BMi BV &
RV Y RVc
`iBM;b(B Y R)V
RV Y RVc
2.1.23 Single Number
Given an array of integers, every element appears twice except for one. Find that single one.
Note: Your algorithm should have a linear runtime complexity. Could you implement it without using
extra memory?
38
1
ff G22i*Q/2- aBM;H2 LmK#2`
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi bBM;H2LmK#2`Up2+iQ`IBMi= MmKbV &
BMi t 4 yc
7Q` UmiQ B , MmKbV &
t 4 Bc
'
`2im`M tc
'
'c
2
ff G22i*Q/2- aBM;H2 LmK#2`
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi bBM;H2LmK#2`Up2+iQ`IBMi= MmKbV &
`2im`M ++mKmHi2UMmKbX#2;BMUV- MmKbX2M/UV- y- #BintQ`IBMi=UVVc
'
'c
Single Number II,
2.1.24
2.1.24 Single Number II
Given an array of integers, every element appears three times except for one. Find that single one.
Note: Your algorithm should have a linear runtime complexity. Could you implement it without using
extra memory?
Single Number
1
1
bBx2Q7UBMiV
+QmMi(B)
+QmMi(bBx2Q7UBMiV) +QmMi(B)
39
2.1
2
QM2
irQ
QM2
1
irQ
mod 3
mod 3
QM2
1
ff G22i*Q/2- aBM;H2 LmK#2` AA
ff
R
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi bBM;H2LmK#2`Up2+iQ`IBMi= MmKbV &
+QMbi BMi q 4 bBx2Q7UBMiV
3c ff
BMi +QmMi(q)c ff +QmMi(B)
B
7BHHnMU+QmMi(y)- q- yVc
7Q` UBMi B 4 yc B I MmKbXbBx2UVc BYYV &
7Q` UBMi D 4 yc D I qc DYYV &
+QmMi(D) Y4 UMmKb(B) == DV Rc
+QmMi(D) W4 jc
'
'
BMi `2bmHi 4 yc
7Q` UBMi B 4 yc B I qc BYYV &
`2bmHi Y4 U+QmMi(B) II BVc
'
`2im`M `2bmHic
'
'c
2
ff G22i*Q/2- aBM;H2 LmK#2` AA
ff
k
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi bBM;H2LmK#2`Up2+iQ`IBMi= MmKbV &
BMi QM2 4 y- irQ 4 y- i?`22 4 yc
7Q` UmiQ B , MmKbV &
irQ %4 UQM2 BVc
QM2 4 Bc
i?`22 4 UQM2 irQVc
QM2 4 i?`22c
irQ 4 i?`22c
'
'c
'
`2im`M QM2c
#Bi
R
40
Single Number,
2.1.23
2.2
ff
bi`m+i GBbiLQ/2 &
BMi pHc
GBbiLQ/2 M2tic
GBbiLQ/2UBMi tV , pHUtV- M2tiUMmHHTi`V & '
'c
2.2.1 Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse
order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: Uk @= 9 @= jV Y U8 @= e @= 9V
Output: d @= y @= 3
Add Binary
3.4
ff G22i*Q/2- // hrQ LmK#2`b
ff
// "BM`v
ff
PUKYMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 //hrQLmK#2`bUGBbiLQ/2 HR- GBbiLQ/2 HkV &
GBbiLQ/2 /mKKvU@RVc ff
BMi +``v 4 yc
GBbiLQ/2 T`2p 4 /mKKvc
7Q` UGBbiLQ/2 T 4 HR- T# 4 Hkc
T 54 MmHHTi` %% T# 54 MmHHTi`c
T 4 T 44 MmHHTi` \ MmHHTi` , T@=M2tiT# 4 T# 44 MmHHTi` \ MmHHTi` , T#@=M2tiT`2p 4 T`2p@=M2tiV &
+QMbi BMi B 4 T 44 MmHHTi` \ y , T@=pHc
+QMbi BMi #B 4 T# 44 MmHHTi` \ y , T#@=pHc
+QMbi BMi pHm2 4 UB Y #B Y +``vV W Ryc
+``v 4 UB Y #B Y +``vV f Ryc
41
2.2
'c
'
T`2p@=M2ti 4 M2r GBbiLQ/2UpHm2Vc ff
'
B7 U+``v = yV
T`2p@=M2ti 4 M2r GBbiLQ/2U+``vVc
`2im`M /mKKvXM2tic
Add Binary,
3.4
2.2.2 Reverse Linked List II
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example: Given R@=k@=j@=9@=8@=MmHHTi`, m = 2 and n = 4,
return R@=9@=j@=k@=8@=MmHHTi`.
Note: Given m, n satisfy the following condition: 1 m n length of list.
15
bug free
ff G22i*Q/2- _2p2`b2 GBMF2/ GBbi AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 `2p2`b2"2ir22MUGBbiLQ/2 ?2/- BMi K- BMi MV &
GBbiLQ/2 /mKKvU@RVc
/mKKvXM2ti 4 ?2/c
GBbiLQ/2 T`2p 4 /mKKvc
7Q` UBMi B 4 yc B I K@Rc YYBV
T`2p 4 T`2p@=M2tic
GBbiLQ/2 +QMbi ?2/k 4 T`2pc
T`2p 4 ?2/k@=M2tic
GBbiLQ/2 +m` 4 T`2p@=M2tic
7Q` UBMi B 4 Kc B I Mc YYBV &
T`2p@=M2ti 4 +m`@=M2tic
+m`@=M2ti 4 ?2/k@=M2tic
?2/k@=M2ti 4 +m`c ff
+m` 4 T`2p@=M2tic
'
42
'
'c
`2im`M /mKKvXM2tic
2.2.3 Partition List
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater
than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example, Given R@=9@=j@=k@=8@=k and t 4 j, return R@=k@=k@=9@=j@=8.
ff G22i*Q/2- S`iBiBQM GBbi
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 T`iBiBQMUGBbiLQ/2 ?2/- BMi tV &
GBbiLQ/2 H27in/mKKvU@RVc ff
GBbiLQ/2 `B;?in/mKKvU@RVc ff
miQ H27in+m` 4 H27in/mKKvc
miQ `B;?in+m` 4 `B;?in/mKKvc
7Q` UGBbiLQ/2 +m` 4 ?2/c +m`c +m` 4 +m`@=M2tiV &
B7 U+m`@=pH I tV &
H27in+m`@=M2ti 4 +m`c
H27in+m` 4 +m`c
' 2Hb2 &
`B;?in+m`@=M2ti 4 +m`c
`B;?in+m` 4 +m`c
'
'
H27in+m`@=M2ti 4 `B;?in/mKKvXM2tic
`B;?in+m`@=M2ti 4 MmHHTi`c
43
2.2
'
'c
`2im`M H27in/mKKvXM2tic
2.2.4 Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given R@=R@=k, return R@=k.
Given R@=R@=k@=j@=j, return R@=k@=j.
ff G22i*Q/2- _2KQp2 .mTHB+i2b 7`QK aQ`i2/ GBbi
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 /2H2i2.mTHB+i2bUGBbiLQ/2 ?2/V &
B7 U5?2/V `2im`M ?2/c
GBbiLQ/2 /mKKvU?2/@=pH Y RVc ff
/mKKvXM2ti 4 ?2/c
?2/
`2+m`U/mKKv- ?2/Vc
`2im`M /mKKvXM2tic
'
T`Bpi2,
biiB+ pQB/ `2+m`UGBbiLQ/2 T`2p- GBbiLQ/2
B7 U+m` 44 MmHHTi`V `2im`Mc
'c
'
B7 UT`2p@=pH 44 +m`@=pHV & ff
T`2p@=M2ti 4 +m`@=M2tic
/2H2i2 +m`c
`2+m`UT`2p- T`2p@=M2tiVc
' 2Hb2 &
`2+m`UT`2p@=M2ti- +m`@=M2tiVc
'
+m`V &
?2/
44
ff G22i*Q/2- _2KQp2 .mTHB+i2b 7`QK aQ`i2/ GBbi
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 /2H2i2.mTHB+i2bUGBbiLQ/2 ?2/V &
B7 U?2/ 44 MmHHTi`V `2im`M MmHHTi`c
'c
'
7Q` UGBbiLQ/2 T`2p 4 ?2/- +m` 4 ?2/@=M2tic +m`c +m` 4 T`2p@=M2tiV &
B7 UT`2p@=pH 44 +m`@=pHV &
T`2p@=M2ti 4 +m`@=M2tic
/2H2i2 +m`c
' 2Hb2 &
T`2p 4 +m`c
'
'
`2im`M ?2/c
Remove Duplicates from Sorted List II
2.2.5
2.2.5 Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers
from the original list.
For example,
Given R@=k@=j@=j@=9@=9@=8, return R@=k@=8.
Given R@=R@=R@=k@=j, return k@=j.
ff G22i*Q/2- _2KQp2 .mTHB+i2b 7`QK aQ`i2/ GBbi AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 /2H2i2.mTHB+i2bUGBbiLQ/2 ?2/V &
B7 U5?2/ %% 5?2/@=M2tiV `2im`M ?2/c
45
2.2
'c
'
GBbiLQ/2 T 4 ?2/@=M2tic
B7 U?2/@=pH 44 T@=pHV &
r?BH2 UT ?2/@=pH 44 T@=pHV &
GBbiLQ/2 iKT 4 Tc
T 4 T@=M2tic
/2H2i2 iKTc
'
/2H2i2 ?2/c
`2im`M /2H2i2.mTHB+i2bUTVc
' 2Hb2 &
?2/@=M2ti 4 /2H2i2.mTHB+i2bU?2/@=M2tiVc
`2im`M ?2/c
'
ff G22i*Q/2- _2KQp2 .mTHB+i2b 7`QK aQ`i2/ GBbi AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 /2H2i2.mTHB+i2bUGBbiLQ/2 ?2/V &
B7 U?2/ 44 MmHHTi`V `2im`M ?2/c
'c
'
GBbiLQ/2 /mKKvUALhnJALVc ff
/mKKvXM2ti 4 ?2/c
GBbiLQ/2 T`2p 4 /mKKv- +m` 4 ?2/c
r?BH2 U+m` 54 MmHHTi`V &
#QQH /mTHB+i2/ 4 7Hb2c
r?BH2 U+m`@=M2ti 54 MmHHTi` +m`@=pH 44 +m`@=M2ti@=pHV &
/mTHB+i2/ 4 i`m2c
GBbiLQ/2 i2KT 4 +m`c
+m` 4 +m`@=M2tic
/2H2i2 i2KTc
'
B7 U/mTHB+i2/V & ff
GBbiLQ/2 i2KT 4 +m`c
+m` 4 +m`@=M2tic
/2H2i2 i2KTc
+QMiBMm2c
'
T`2p@=M2ti 4 +m`c
T`2p 4 T`2p@=M2tic
+m` 4 +m`@=M2tic
'
T`2p@=M2ti 4 +m`c
`2im`M /mKKvXM2tic
46
Remove Duplicates from Sorted List
2.2.4
2.2.6 Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative.
For example: Given R@=k@=j@=9@=8@=MmHHTi` and F 4 k, return 9@=8@=R@=k@=j@=MmHHTi`.
len
len
len k
ff G22i*Q/2- _2KQp2 _Qii2 GBbi
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 `Qii2_B;?iUGBbiLQ/2 ?2/- BMi FV &
B7 U?2/ 44 MmHHTi` %% F 44 yV `2im`M ?2/c
BMi H2M 4 Rc
GBbiLQ/2 T 4 ?2/c
r?BH2 UT@=M2tiV & ff
H2MYYc
T 4 T@=M2tic
'
F 4 H2M @ F W H2Mc
'c
'
T@=M2ti 4 ?2/c ff
7Q`UBMi bi2T 4 yc bi2T I Fc bi2TYYV &
T 4 T@=M2tic ff
'
?2/ 4 T@=M2tic ff
T@=M2ti 4 MmHHTi`c ff
`2im`M ?2/c
k% = len
next
47
2.2
2.2.7 Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.
For example, Given linked list: R@=k@=j@=9@=8, and n = 2.
After removing the second node from the end, the linked list becomes R@=k@=j@=8.
Note:
Given n will always be valid.
Try to do this in one pass.
p, q
ff G22i*Q/2- _2KQp2 Li? LQ/2 6`QK 1M/ Q7 GBbi
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 `2KQp2Li?6`QK1M/UGBbiLQ/2 ?2/- BMi MV &
GBbiLQ/2 /mKKv&@R- ?2/'c
GBbiLQ/2 T 4 /mKKv- [ 4 /mKKvc
7Q` UBMi B 4 yc B I Mc BYYV
[ 4 [@=M2tic
'
'c
ff [
r?BH2U[@=M2tiV & ff
T 4 T@=M2tic
[ 4 [@=M2tic
'
GBbiLQ/2 iKT 4 T@=M2tic
T@=M2ti 4 T@=M2ti@=M2tic
/2H2i2 iKTc
`2im`M /mKKvXM2tic
2.2.8 Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
T@=M2ti
48
2
For example, Given R@=k@=j@=9, you should return the list as k@=R@=9@=j.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes
itself can be changed.
ff G22i*Q/2- arT LQ/2b BM SB`b
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 brTSB`bUGBbiLQ/2 ?2/V &
B7 U?2/ 44 MmHHTi` %% ?2/@=M2ti 44 MmHHTi`V `2im`M ?2/c
GBbiLQ/2 /mKKvU@RVc
/mKKvXM2ti 4 ?2/c
'c
'
7Q`UGBbiLQ/2 T`2p 4 /mKKv- +m` 4 T`2p@=M2ti- M2ti 4 +m`@=M2tic
M2tic
T`2p 4 +m`- +m` 4 +m`@=M2ti- M2ti 4 +m` \ +m`@=M2ti, MmHHTi`V &
T`2p@=M2ti 4 M2tic
+m`@=M2ti 4 M2ti@=M2tic
M2ti@=M2ti 4 +m`c
'
`2im`M /mKKvXM2tic
ff G22i*Q/2- arT LQ/2b BM SB`b
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 brTSB`bUGBbiLQ/2 ?2/V &
GBbiLQ/2 T 4 ?2/c
r?BH2 UT T@=M2tiV &
brTUT@=pH- T@=M2ti@=pHVc
T 4 T@=M2ti@=M2tic
'
'c
'
`2im`M ?2/c
Reverse Nodes in k-Group,
2.2.9
49
2.2
2.2.9 Reverse Nodes in k-Group
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
You may not alter the values in the nodes, only nodes itself may be changed.
Only constant memory is allowed.
For example, Given this linked list: R@=k@=j@=9@=8
For k = 2, you should return: k@=R@=9@=j@=8
For k = 3, you should return: j@=k@=R@=9@=8
ff G22i*Q/2- _2p2`b2 LQ/2b BM F@:`QmT
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 `2p2`b2E:`QmTUGBbiLQ/2 ?2/- BMi FV &
B7 U?2/ 44 MmHHTi` %% ?2/@=M2ti 44 MmHHTi` %% F I kV
`2im`M ?2/c
'c
'
GBbiLQ/2 M2tin;`QmT 4 ?2/c
7Q` UBMi B 4 yc B I Fc YYBV &
B7 UM2tin;`QmTV
M2tin;`QmT 4 M2tin;`QmT@=M2tic
2Hb2
`2im`M ?2/c
'
ff M2tin;`QmT Bb i?2 ?2/ Q7 M2ti ;`QmT
ff M2rnM2tin;`QmT Bb i?2 M2r ?2/ Q7 M2ti ;`QmT 7i2` `2p2`bBQM
GBbiLQ/2 M2rnM2tin;`QmT 4 `2p2`b2E:`QmTUM2tin;`QmT- FVc
GBbiLQ/2 T`2p 4 LlGG- +m` 4 ?2/c
r?BH2 U+m` 54 M2tin;`QmTV &
GBbiLQ/2 M2ti 4 +m`@=M2tic
+m`@=M2ti 4 T`2p \ T`2p , M2rnM2tin;`QmTc
T`2p 4 +m`c
+m` 4 M2tic
'
`2im`M T`2pc ff T`2p rBHH #2 i?2 M2r ?2/ Q7 i?Bb ;`QmT
50
ff G22i*Q/2- _2p2`b2 LQ/2b BM F@:`QmT
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 `2p2`b2E:`QmTUGBbiLQ/2 ?2/- BMi FV &
B7 U?2/ 44 MmHHTi` %% ?2/@=M2ti 44 MmHHTi` %% F I kV `2im`M ?2/c
GBbiLQ/2 /mKKvU@RVc
/mKKvXM2ti 4 ?2/c
7Q`UGBbiLQ/2 T`2p 4 /mKKv- 2M/ 4 ?2/c 2M/c 2M/ 4 T`2p@=M2tiV &
7Q` UBMi B 4 Rc B I F 2M/c BYYV
2M/ 4 2M/@=M2tic
B7 U2M/ 44 MmHHTi`V #`2Fc ff
F
'
'
'c
T`2p 4 `2p2`b2UT`2p- T`2p@=M2ti- 2M/Vc
`2im`M /mKKvXM2tic
ff T`2p
7B`bi
- (#2;BM- 2M/)
MmHH
ff
R
GBbiLQ/2 `2p2`b2UGBbiLQ/2 T`2p- GBbiLQ/2 #2;BM- GBbiLQ/2 2M/V &
GBbiLQ/2 2M/nM2ti 4 2M/@=M2tic
7Q` UGBbiLQ/2 T 4 #2;BM- +m` 4 T@=M2ti- M2ti 4 +m`@=M2tic
+m` 54 2M/nM2tic
T 4 +m`- +m` 4 M2ti- M2ti 4 M2ti \ M2ti@=M2ti , MmHHTi`V &
+m`@=M2ti 4 Tc
'
#2;BM@=M2ti 4 2M/nM2tic
T`2p@=M2ti 4 2M/c
`2im`M #2;BMc
'
Swap Nodes in Pairs,
2.2.8
2.2.10 Copy List with Random Pointer
A linked list is given such that each node contains an additional random pointer which could point to
any node in the list or null.
Return a deep copy of the list.
51
2.2
ff G22i*Q/2- *QTv GBbi rBi? _M/QK SQBMi2`
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
_M/QKGBbiLQ/2 +QTv_M/QKGBbiU_M/QKGBbiLQ/2 ?2/V &
7Q` U_M/QKGBbiLQ/2 +m` 4 ?2/c +m` 54 MmHHTi`c V &
_M/QKGBbiLQ/2 MQ/2 4 M2r _M/QKGBbiLQ/2U+m`@=H#2HVc
MQ/2@=M2ti 4 +m`@=M2tic
+m`@=M2ti 4 MQ/2c
+m` 4 MQ/2@=M2tic
'
7Q` U_M/QKGBbiLQ/2 +m` 4 ?2/c +m` 54 MmHHTi`c V &
B7 U+m`@=`M/QK 54 LlGGV
+m`@=M2ti@=`M/QK 4 +m`@=`M/QK@=M2tic
+m` 4 +m`@=M2ti@=M2tic
'
'
'c
ff
_M/QKGBbiLQ/2 /mKKvU@RVc
7Q` U_M/QKGBbiLQ/2 +m` 4 ?2/+m` 54 MmHHTi`c V &
M2rn+m`@=M2ti 4 +m`@=M2tic
M2rn+m` 4 M2rn+m`@=M2tic
+m`@=M2ti 4 +m`@=M2ti@=M2tic
+m` 4 +m`@=M2tic
'
`2im`M /mKKvXM2tic
M2rn+m` 4 /mKKvc
2.2.11 Linked List Cycle
Given a linked list, determine if it has a cycle in it.
Follow up: Can you solve it without using extra space?
52
mMQ`/2`2/nKTIBMi- #QQH= pBbBi2/
O(n)
O(n)
O(N )
O(1)
http://leetcode.com/2010/09/detecting-loop-in-singly-linked-list.html
ffG22i*Q/2- GBMF2/ GBbi *v+H2
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH ?b*v+H2UGBbiLQ/2 ?2/V &
ff
GBbiLQ/2 bHQr 4 ?2/- 7bi 4 ?2/c
r?BH2 U7bi 7bi@=M2tiV &
bHQr 4 bHQr@=M2tic
7bi 4 7bi@=M2ti@=M2tic
B7 UbHQr 44 7biV `2im`M i`m2c
'
`2im`M 7Hb2c
'
'c
Linked List Cycle II,
2.2.12
2.2.12 Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return MmHH.
Follow up: Can you solve it without using extra space?
fast
slow
slow
s
slow
fast
2s
fast
fast
2s
s + nr
nr
n
n
(1 n)
r
53
2.2
x+a
nr = (n1)r + r = (n 1)r + L x
(n 1)r + (Lxa)
Lxa
?2/
bHQrk
n1
ffG22i*Q/2- GBMF2/ GBbi *v+H2 AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 /2i2+i*v+H2UGBbiLQ/2 ?2/V &
GBbiLQ/2 bHQr 4 ?2/- 7bi 4 ?2/c
r?BH2 U7bi 7bi@=M2tiV &
bHQr 4 bHQr@=M2tic
7bi 4 7bi@=M2ti@=M2tic
B7 UbHQr 44 7biV &
GBbiLQ/2 bHQrk 4 ?2/c
r?BH2 UbHQrk 54 bHQrV &
bHQrk 4 bHQrk@=M2tic
bHQr 4 bHQr@=M2tic
'
`2im`M bHQrkc
'c
'
'
'
`2im`M MmHHTi`c
Linked List Cycle,
2.2.11
2.2.13 Reorder List
Given a singly linked list L : L0 L1 Ln1 Ln , reorder it to: L0 Ln L1
Ln1 L2 Ln2
You must do this in-place without altering the nodes values.
For example, Given &R-k-j-9', reorder it to &R-9-k-j'.
54
in-place
O(1)
reverse
ff G22i*Q/2- _2Q`/2` GBbi
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ `2Q`/2`GBbiUGBbiLQ/2 ?2/V &
B7 U?2/ 44 MmHHTi` %% ?2/@=M2ti 44 MmHHTi`V `2im`Mc
GBbiLQ/2 bHQr 4 ?2/- 7bi 4 ?2/- T`2p 4 MmHHTi`c
r?BH2 U7bi 7bi@=M2tiV &
T`2p 4 bHQrc
bHQr 4 bHQr@=M2tic
7bi 4 7bi@=M2ti@=M2tic
'
T`2p@=M2ti 4 MmHHTi`c ff +mi i KB//H2
bHQr 4 `2p2`b2UbHQrVc
'
ff K2`;2 irQ HBbib
GBbiLQ/2 +m`` 4 ?2/c
r?BH2 U+m``@=M2tiV &
GBbiLQ/2 iKT 4 +m``@=M2tic
+m``@=M2ti 4 bHQrc
bHQr 4 bHQr@=M2tic
+m``@=M2ti@=M2ti 4 iKTc
+m`` 4 iKTc
'
+m``@=M2ti 4 bHQrc
GBbiLQ/2 `2p2`b2UGBbiLQ/2 ?2/V &
B7 U?2/ 44 MmHHTi` %% ?2/@=M2ti 44 MmHHTi`V `2im`M ?2/c
'c
'
GBbiLQ/2 T`2p 4 ?2/c
7Q` UGBbiLQ/2 +m`` 4 ?2/@=M2ti- M2ti 4 +m``@=M2tic +m``c
T`2p 4 +m``- +m`` 4 M2ti- M2ti 4 M2ti \ M2ti@=M2ti , MmHHTi`V &
+m``@=M2ti 4 T`2pc
'
?2/@=M2ti 4 MmHHTi`c
`2im`M T`2pc
55
2.2
2.2.14 LRU Cache
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the
following operations: get and set.
;2iUF2vV - Get the value (will always be positive) of the key if the key exists in the cache, otherwise
return -1.
b2iUF2v- pHm2V - Set or insert the value if the key is not already present. When the cache reached its
capacity, it should invalidate the least recently used item before inserting a new item.
(bi/,,HBbi)
(bi/,,mMQ`/2`2/nKT)
O(1)
hash
cache
size
capacity
ff G22i*Q/2- G_l *+?2
ff
PUHQ;MV
PUMV
+Hbb G_l*+?2&
T`Bpi2,
bi`m+i *+?2LQ/2 &
BMi F2vc
BMi pHm2c
*+?2LQ/2UBMi F- BMi pV ,F2vUFV- pHm2UpV&'
'c
Tm#HB+,
G_l*+?2UBMi +T+BivV &
i?Bb@=+T+Biv 4 +T+Bivc
'
hash
56
BMi ;2iUBMi F2vV &
B7 U++?2JTX7BM/UF2vV 44 ++?2JTX2M/UVV `2im`M @Rc
'
ff
KT
++?2GBbiXbTHB+2U++?2GBbiX#2;BMUV- ++?2GBbi- ++?2JT(F2v)Vc
++?2JT(F2v) 4 ++?2GBbiX#2;BMUVc
`2im`M ++?2JT(F2v)@=pHm2c
pQB/ b2iUBMi F2v- BMi pHm2V &
B7 U++?2JTX7BM/UF2vV 44 ++?2JTX2M/UVV &
B7 U++?2GBbiXbBx2UV 44 +T+BivV & ff
++?2JTX2`b2U++?2GBbiX#+FUVXF2vVc
++?2GBbiXTQTn#+FUVc
'
ff
KT
++?2GBbiXTmb?n7`QMiU*+?2LQ/2UF2v- pHm2VVc
++?2JT(F2v) 4 ++?2GBbiX#2;BMUVc
' 2Hb2 &
ff
KT
++?2JT(F2v)@=pHm2 4 pHm2c
++?2GBbiXbTHB+2U++?2GBbiX#2;BMUV- ++?2GBbi- ++?2JT(F2v)Vc
++?2JT(F2v) 4 ++?2GBbiX#2;BMUVc
'
'
T`Bpi2,
HBbiI*+?2LQ/2= ++?2GBbic
mMQ`/2`2/nKTIBMi- HBbiI*+?2LQ/2=,,Bi2`iQ`= ++?2JTc
BMi +T+Bivc
'c
3.1 Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring
cases.
For example,
] KM- THM- +MH, SMK] is a palindrome.
]`+2 +`] is not a palindrome.
Note: Have you consider that the string might be empty? This is a good question to ask during an
interview.
For the purpose of this problem, we define empty string as valid palindrome.
ff G22i *Q/2- oHB/ SHBM/`QK2
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbSHBM/`QK2Ubi`BM; bV &
i`Mb7Q`KUbX#2;BMUV- bX2M/UV- bX#2;BMUV- ,,iQHQr2`Vc
miQ H27i 4 bX#2;BMUV- `B;?i 4 T`2pUbX2M/UVVc
r?BH2 UH27i I `B;?iV &
B7 U5,,BbHMmKU H27iVV YYH27ic
2Hb2 B7 U5,,BbHMmKU `B;?iVV @@`B;?ic
2Hb2 B7 U H27i 54 `B;?iV `2im`M 7Hb2c
2Hb2 & H27iYY- `B;?i@@c '
'
`2im`M i`m2c
'
'c
57
58
Palindrome Number,
15.2
3.2 Implement strStr()
Implement strStr().
Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.
Rabin-Karp
O(m n)
KMP
Boyer-Mooer
BUG
ff G22i*Q/2- AKTH2K2Mi bi`ai`UV
ff
PUL JV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi bi`ai`U+QMbi bi`BM; ?vbi+F- +QMbi bi`BM; M22/H2V &
B7 UM22/H2X2KTivUVV `2im`M yc
'c
'
+QMbi BMi L 4 ?vbi+FXbBx2UV @ M22/H2XbBx2UV Y Rc
7Q` UBMi B 4 yc B I Lc BYYV &
BMi D 4 Bc
BMi F 4 yc
r?BH2 UD I ?vbi+FXbBx2UV F I M22/H2XbBx2UV ?vbi+F(D) 44 M22/H2(F)V &
DYYc
FYYc
'
B7 UF 44 M22/H2XbBx2UVV `2im`M Bc
'
`2im`M @Rc
KMP
ff G22i*Q/2- AKTH2K2Mi bi`ai`UV
ff EJS
PULYJV
PUJV
+Hbb aQHmiBQM &
Tm#HB+,
BMi bi`ai`U+QMbi bi`BM; ?vbi+F- +QMbi bi`BM; M22/H2V &
`2im`M FKTU?vbi+FX+nbi`UV- M22/H2X+nbi`UVVc
'
59
3.2 Implement strStr()
T`Bpi2,
f
!#`B27
M2ti
!T`K(BM) Tii2`M
!T`K(Qmi) M2ti M2ti
!`2im`M
f
biiB+ pQB/ +QKTmi2nT`27BtU+QMbi +?`
BMi Bc
BMi D 4 @Rc
+QMbi BMi K 4 bi`H2MUTii2`MVc
Tii2`M- BMi M2ti()V &
M2ti(y) 4 Dc
7Q` UB 4 Rc B I Kc BYYV &
r?BH2 UD = @R Tii2`M(D Y R) 54 Tii2`M(B)V D 4 M2ti(D)c
'
f
'
B7 UTii2`M(B) 44 Tii2`M(D Y R)V DYYc
M2ti(B) 4 Dc
!#`B27 EJS
!T`K(BM) i2ti
!T`K(BM) Tii2`M
!`2im`M
@R
f
biiB+ BMi FKTU+QMbi +?` i2ti- +QMbi +?` Tii2`MV &
BMi Bc
BMi D 4 @Rc
+QMbi BMi M 4 bi`H2MUi2tiVc
+QMbi BMi K 4 bi`H2MUTii2`MVc
B7 UM 44 y K 44 yV `2im`M yc f ]]-]] f
B7 UK 44 yV `2im`M yc f ]]-]] f
BMi M2ti 4 UBMi VKHHQ+UbBx2Q7UBMiV
KVc
+QKTmi2nT`27BtUTii2`M- M2tiVc
7Q` UB 4 yc B I Mc BYYV &
r?BH2 UD = @R Tii2`M(D Y R) 54 i2ti(B)V D 4 M2ti(D)c
'
'
B7 Ui2ti(B) 44 Tii2`M(D Y R)V DYYc
B7 UD 44 K @ RV &
7`22UM2tiVc
`2im`M B@Dc
'
7`22UM2tiVc
`2im`M @Rc
60
'c
String to Integer (atoi)
3.3
3.3 String to Integer (atoi)
Implement iQB to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and
ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
Requirements for atoi:
The function first discards as many whitespace characters as necessary until the first non-whitespace
character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by
as many numerical digits as possible, and interprets them as a numerical value.
The string can contain additional characters after those that form the integral number, which are ignored
and have no effect on the behavior of this function.
If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such
sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.
If no valid conversion could be performed, a zero value is returned. If the correct value is out of the
range of representable values, ALhnJs UkR9d93je9dV or ALhnJAL U@kR9d93je93V is returned.
1.
-3924x8fc
2.
++c, ++1
3.
2147483648
+ 413,
ff G22i*Q/2- ai`BM; iQ AMi2;2` UiQBV
ff
PUMV
PURV
+Hbb aQHmiBQM &
61
3.4 Add Binary
Tm#HB+,
BMi KviQBU+QMbi bi`BM; bi`V &
BMi MmK 4 yc
BMi bB;M 4 Rc
+QMbi BMi M 4 bi`XH2M;i?UVc
BMi B 4 yc
r?BH2 Ubi`(B) 44 ^ ^ B I MV BYYc
B7 Ubi`(B) 44 ^Y^V &
BYYc
' 2Hb2 B7 Ubi`(B) 44 ^@^V &
bB;M 4 @Rc
BYYc
'
'c
'
7Q` Uc B I Mc BYYV &
B7 Ubi`(B) I ^y^ %% bi`(B) = ^N^V
#`2Fc
B7 UMmK = ALhnJs f Ry %%
UMmK 44 ALhnJs f Ry
Ubi`(B) @ ^y^V = ALhnJs W RyVV &
`2im`M bB;M 44 @R \ ALhnJAL , ALhnJsc
'
MmK 4 MmK
Ry Y bi`(B) @ ^y^c
'
`2im`M MmK
bB;Mc
Implement strStr()
3.2
3.4 Add Binary
Given two binary strings, return their sum (also a binary string).
For example,
4 ]RR]
# 4 ]R]
Return ]Ryy].
62
ffG22i*Q/2- // "BM`v
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; //"BM`vUbi`BM; - bi`BM; #V &
bi`BM; `2bmHic
+QMbi bBx2ni M 4 XbBx2UV = #XbBx2UV \ XbBx2UV , #XbBx2UVc
`2p2`b2UX#2;BMUV- X2M/UVVc
`2p2`b2U#X#2;BMUV- #X2M/UVVc
BMi +``v 4 yc
7Q` UbBx2ni B 4 yc B I Mc BYYV &
+QMbi BMi B 4 B I XbBx2UV \ (B) @ ^y^ , yc
+QMbi BMi #B 4 B I #XbBx2UV \ #(B) @ ^y^ , yc
+QMbi BMi pH 4 UB Y #B Y +``vV W kc
+``v 4 UB Y #B Y +``vV f kc
`2bmHiXBMb2`iU`2bmHiX#2;BMUV- pH Y ^y^Vc
'
B7 U+``v 44 RV &
`2bmHiXBMb2`iU`2bmHiX#2;BMUV- ^R^Vc
'
`2im`M `2bmHic
'
'c
Add Two Numbers,
2.2.1
3.5 Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length
of S is 1000, and there exists one unique longest palindromic substring.
O(n2 )
O(n2 )
7(B)(D)
[i,j]
7(B)(D) 4 B7 UB 44 DV a(B)
B7 Ua(B) 44 a(D) 7(BYR)(D@R) 44 a(BYR)(D@R)V a(B)(D)
2Hb2 KtU7(BYR)(D@R)- 7(B)(D@R)- 7(BYR)(D)V
63
3.5 Longest Palindromic Substring
O(n2 )
f (i, j) =
7UB-DV
[i,j]
true
,i = j
S[i] = S[j]
S[i] = S[j] and f (i + 1, j 1)
Manacher s Algorithm,
O(n)
,j = i + 1
,j > i + 1
http://leetcode.com/2011/11/longest-
palindromic-substring-part-ii.html
ff G22i*Q/2- GQM;2bi SHBM/`QKB+ am#bi`BM;
ff
ff
PUMkV
PUMkV
ivT2/27 bi`BM;,,+QMbinBi2`iQ` Ai2`iQ`c
MK2bT+2 bi/ &
i2KTHi2I=
bi`m+i ?b?ITB`IAi2`iQ`- Ai2`iQ`== &
bBx2ni QT2`iQ`UVUTB`IAi2`iQ`- Ai2`iQ`= +QMbi TV +QMbi &
`2im`M UUbBx2niV U TX7B`biVV UUbBx2niV U TXb2+QM/VVc
'
'c
'
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; HQM;2biSHBM/`QK2Ubi`BM; +QMbi bV &
++?2X+H2`UVc
`2im`M ++?2/GQM;2biSHBM/`QK2UbX#2;BMUV- bX2M/UVVc
'
T`Bpi2,
mMQ`/2`2/nKTITB`IAi2`iQ`- Ai2`iQ`=- bi`BM;= ++?2c
bi`BM; HQM;2biSHBM/`QK2UAi2`iQ` 7B`bi- Ai2`iQ` HbiV &
bBx2ni H2M;i? 4 /BbiM+2U7B`bi- HbiVc
B7 UH2M;i? I kV `2im`M bi`BM;U7B`bi- HbiVc
miQ b 4 ++?2/GQM;2biSHBM/`QK2UM2tiU7B`biV- T`2pUHbiVVc
B7 UbXH2M;i?UV 44 H2M;i? @ k
`2im`M bi`BM;U7B`bi- HbiVc
7B`bi 44
T`2pUHbiVV
miQ bR 4 ++?2/GQM;2biSHBM/`QK2UM2tiU7B`biV- HbiVc
miQ bk 4 ++?2/GQM;2biSHBM/`QK2U7B`bi- T`2pUHbiVVc
ff `2im`M KtUb- bR- bkV
B7 UbXbBx2UV = bRXbBx2UVV `2im`M bXbBx2UV = bkXbBx2UV \ b , bkc
64
'
2Hb2 `2im`M bRXbBx2UV = bkXbBx2UV \ bR , bkc
bi`BM; ++?2/GQM;2biSHBM/`QK2UAi2`iQ` 7B`bi- Ai2`iQ` HbiV &
miQ F2v 4 KF2nTB`U7B`bi- HbiVc
miQ TQb 4 ++?2X7BM/UF2vVc
'c
'
B7 UTQb 54 ++?2X2M/UVV `2im`M TQb@=b2+QM/c
2Hb2 `2im`M ++?2(F2v) 4 HQM;2biSHBM/`QK2U7B`bi- HbiVc
ff G22i*Q/2- GQM;2bi SHBM/`QKB+ am#bi`BM;
ff
PUMkV
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; HQM;2biSHBM/`QK2U+QMbi bi`BM; bV &
+QMbi BMi M 4 bXbBx2UVc
#QQH 7(M)(M)c
7BHHnMU7(y)(y)- M
M- 7Hb2Vc
ff
p2+iQ`
ffp2+iQ`Ip2+iQ`I#QQH= = 7UM- p2+iQ`I#QQH=UM- 7Hb2VVc
bBx2ni KtnH2M 4 R- bi`i 4 yc ff
'c
'
7Q` UbBx2ni B 4 yc B I bXbBx2UVc BYYV
7(B)(B) 4 i`m2c
7Q` UbBx2ni D 4 yc D I Bc DYYV &
7(D)(B) 4 Ub(D) 44 b(B) UB
B7 U7(D)(B) KtnH2M I UB @
KtnH2M 4 B @ D Y Rc
bi`i 4 Dc
'
'
'
`2im`M bXbm#bi`Ubi`i- KtnH2MVc
&
ff (D- B)
@ D I k %% 7(D Y R)(B @ R)VVc
D Y RVV &
Manacher s Algorithm
ff G22i*Q/2- GQM;2bi SHBM/`QKB+ am#bi`BM;
ff JM+?2` b H;Q`Bi?K
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
ff h`Mb7Q`K a BMiQ hX
ff 6Q` 2tKTH2- a 4 ]##]- h 4 ]OO#O#OO0]X
ff M/ 0 bB;Mb `2 b2MiBM2Hb TT2M/2/ iQ 2+? 2M/ iQ pQB/ #QmM/b +?2+FBM;
bi`BM; T`2S`Q+2bbU+QMbi bi`BM; bV &
BMi M 4 bXH2M;i?UVc
65
3.5 Longest Palindromic Substring
B7 UM 44 yV `2im`M ]0]c
bi`BM; `2i 4 ]]c
7Q` UBMi B 4 yc B I Mc BYYV `2i Y4 ]O] Y bXbm#bi`UB- RVc
'
`2i Y4 ]O0]c
`2im`M `2ic
bi`BM; HQM;2biSHBM/`QK2Ubi`BM; bV &
bi`BM; h 4 T`2S`Q+2bbUbVc
+QMbi BMi M 4 hXH2M;i?UVc
ff
h(B)
f
ff
S(B)
BMi S(M)c
BMi * 4 y- _ 4 yc
h(B)
7Q` UBMi B 4 Rc B I M @ Rc BYYV &
BMi BnKB``Q` 4 k
* @ Bc ff 2[mHb iQ B^ 4 * @ UB@*V
S(B) 4 U_ = BV \ KBMU_ @ B- S(BnKB``Q`)V , yc
ff ii2KTi iQ 2tTM/ THBM/`QK2 +2Mi2`2/ i B
r?BH2 Uh(B Y R Y S(B)) 44 h(B @ R @ S(B))V
S(B)YYc
'
ff A7 THBM/`QK2 +2Mi2`2/ i B 2tTM/ Tbi _ff /Dmbi +2Mi2` #b2/ QM 2tTM/2/ THBM/`QK2X
B7 UB Y S(B) = _V &
* 4 Bc
_ 4 B Y S(B)c
'
ff 6BM/ i?2 KtBKmK 2H2K2Mi BM SX
BMi KtnH2M 4 yc
BMi +2Mi2`nBM/2t 4 yc
7Q` UBMi B 4 Rc B I M @ Rc BYYV &
B7 US(B) = KtnH2MV &
KtnH2M 4 S(B)c
+2Mi2`nBM/2t 4 Bc
'
'
'c
'
`2im`M bXbm#bi`UU+2Mi2`nBM/2t @ R @ KtnH2MV f k- KtnH2MVc
66
3.6 Regular Expression Matching
Implement regular expression matching with support for ^X^ and ^ ^.
^X^ Matches any single character. ^ ^ Matches zero or more of the preceding element.
The matching should cover the entire input string (not partial).
The function prototype should be:
#QQH BbJi+?U+QMbi +?`
b- +QMbi +?`
TV
Some examples:
BbJi+?U]]-]]V 7Hb2
BbJi+?U]]-]]V i`m2
BbJi+?U]]-]]V 7Hb2
BbJi+?U]]- ] ]V i`m2
BbJi+?U]]- ]X ]V i`m2
BbJi+?U]#]- ]X ]V i`m2
BbJi+?U]#]- ]+ #]V i`m2
ff G22i*Q/2- _2;mH` 1tT`2bbBQM Ji+?BM;
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbJi+?U+QMbi bi`BM; b- +QMbi bi`BM; TV &
`2im`M BbJi+?UbX+nbi`UV- TX+nbi`UVVc
'
T`Bpi2,
#QQH BbJi+?U+QMbi +?` b- +QMbi +?` TV &
B7 U T 44 ^$y^V `2im`M b 44 ^$y^c
ff M2ti +?` Bb MQi ^ ^- i?2M Kmbi Ki+? +m``2Mi +?`+i2`
B7 U UT Y RV 54 ^ ^V &
B7 U T 44 b %% U T 44 ^X^ b 54 ^$y^VV
`2im`M BbJi+?Ub Y R- T Y RVc
2Hb2
`2im`M 7Hb2c
' 2Hb2 & ff M2ti +?` Bb ^ ^
r?BH2 U T 44 b %% U T 44 ^X^ b 54 ^$y^VV &
B7 UBbJi+?Ub- T Y kVV
`2im`M i`m2c
bYYc
'
`2im`M BbJi+?Ub- T Y kVc
67
3.7 Wildcard Matching
'c
'
'
Wildcard Matching,
3.7
3.7 Wildcard Matching
Implement wildcard pattern matching with support for ^\^ and ^ ^.
^\^ Matches any single character. ^ ^ Matches any sequence of characters (including the empty sequence).
The matching should cover the entire input string (not partial).
The function prototype should be:
#QQH BbJi+?U+QMbi +?`
b- +QMbi +?`
TV
Some examples:
BbJi+?U]]-]]V 7Hb2
BbJi+?U]]-]]V i`m2
BbJi+?U]]-]]V 7Hb2
BbJi+?U]]- ] ]V i`m2
BbJi+?U]]- ] ]V i`m2
BbJi+?U]#]- ]\ ]V i`m2
BbJi+?U]#]- ]+ #]V 7Hb2
^ ^
^ ^
bYY
ff G22i*Q/2- qBH/+`/ Ji+?BM;
ff
ff
PUM5 K5V
+Hbb aQHmiBQM &
Tm#HB+,
PUMV
^ ^
68
#QQH BbJi+?U+QMbi bi`BM; b- +QMbi bi`BM; TV &
`2im`M BbJi+?UbX+nbi`UV- TX+nbi`UVVc
'
T`Bpi2,
#QQH BbJi+?U+QMbi +?` b- +QMbi +?` TV &
B7 U T 44 ^ ^V &
r?BH2 U T 44 ^ ^V YYTc ffbFBT +QMiBMmQmb ^ ^
B7 U T 44 ^$y^V `2im`M i`m2c
r?BH2 U b 54 ^$y^ 5BbJi+?Ub- TVV YYbc
'c
'
`2im`M
'
2Hb2 B7 U T
2Hb2 B7 U T
2Hb2 `2im`M
b 54 ^$y^c
44 ^$y^ %% b 44 ^$y^V `2im`M T 44 bc
44 b %% T 44 ^\^V `2im`M BbJi+?UYYb- YYTVc
7Hb2c
ff G22i*Q/2- qBH/+`/ Ji+?BM;
ff
PUM KV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbJi+?U+QMbi bi`BM; b- +QMbi bi`BM; TV &
`2im`M BbJi+?UbX+nbi`UV- TX+nbi`UVVc
'
T`Bpi2,
#QQH BbJi+?U+QMbi +?` b- +QMbi +?` TV &
#QQH bi` 4 7Hb2c
+QMbi +?` bi`- Ti`c
7Q` Ubi` 4 b- Ti` 4 Tc bi` 54 ^$y^c bi`YY- Ti`YYV &
brBi+? U Ti`V &
+b2 ^\^,
#`2Fc
+b2 ^ ^,
bi` 4 i`m2c
b 4 bi`- T 4 Ti`c
r?BH2 U T 44 ^ ^V TYYc ffbFBT +QMiBMmQmb ^ ^
B7 U T 44 ^$y^V `2im`M i`m2c
bi` 4 b @ Rc
Ti` 4 T @ Rc
#`2Fc
/27mHi,
B7 U bi` 54 Ti`V &
ff
^ ^
B7 U5bi`V `2im`M 7Hb2c
bYYc
bi` 4 b @ Rc
Ti` 4 T @ Rc
'
'
'
69
3.8 Longest Common Prefix
'c
'
r?BH2 U Ti` 44 ^ ^V Ti`YYc
`2im`M U Ti` 44 ^$y^Vc
Regular Expression Matching,
3.6
3.8 Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings.
ff G22i*Q/2- GQM;2bi *QKKQM S`27Bt
ff
y
ff
PUMRYMkYXXXV
ff !mi?Q`
U?iiT,ffr2B#QX+QKfx?Qm/BiivV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; HQM;2bi*QKKQMS`27BtUp2+iQ`Ibi`BM;= bi`bV &
B7 Ubi`bX2KTivUVV `2im`M ]]c
'c
'
7Q` UBMi B/t 4 yc B/t I bi`b(y)XbBx2UVc YYB/tV & ff
7Q` UBMi B 4 Rc B I bi`bXbBx2UVc YYBV &
B7 Ubi`b(B)(B/t) 54 bi`b(y)(B/t)V `2im`M bi`b(y)Xbm#bi`Uy-B/tVc
'
'
`2im`M bi`b(y)c
ff G22i*Q/2- GQM;2bi *QKKQM S`27Bt
ff
y
ff
ff
PUMRYMkYXXXV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; HQM;2bi*QKKQMS`27BtUp2+iQ`Ibi`BM;= bi`bV &
70
3
B7 Ubi`bX2KTivUVV `2im`M ]]c
BMi `B;?inKQbi 4 bi`b(y)XbBx2UV @ Rc
7Q` UbBx2ni B 4 Rc B I bi`bXbBx2UVc BYYV
7Q` UBMi D 4 yc D I4 `B;?inKQbic DYYV
B7 Ubi`b(B)(D) 54 bi`b(y)(D)V ff
`B;?inKQbi 4 D @ Rc
'
'c
bi`BM;,,()
`2im`M bi`b(y)Xbm#bi`Uy- `B;?inKQbi Y RVc
3.9 Valid Number
Validate if a given string is numeric.
Some examples:
]y] 4= i`m2
] yXR ] 4= i`m2
]#+] 4= 7Hb2
]R ] 4= 7Hb2
]k2Ry] 4= i`m2
Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up
front before implementing one.
bi`iQ/UV
ff G22i*Q/2- oHB/ LmK#2`
ff !mi?Q`
U?iiT,ffr2B#QX+QKfHmM;QM;V
ff 7BMBi2 miQKi
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbLmK#2`U+QMbi bi`BM; bV &
2MmK AMTmihvT2 &
ALoGA.ff y
aS*1ff R
PUMV
71
3.9 Valid Number
aA:L.A:Ah.Ph1sSPL1LhLlJnALSlha
ff
ff
ff
ff
ff
k
j
9
8
e
'c
+QMbi BMi i`MbBiBQMh#H2()(LlJnALSlha) 4 &
@R- y- j- R- k- @R- ff M2ti bii2b 7Q` bii2 y
@R- 3- @R- R- 9- 8ff M2ti bii2b 7Q` bii2 R
@R- @R- @R- 9- @R- @Rff M2ti bii2b 7Q` bii2 k
@R- @R- @R- R- k- @Rff M2ti bii2b 7Q` bii2 j
@R- 3- @R- 9- @R- 8ff M2ti bii2b 7Q` bii2 9
@R- @R- e- d- @R- @Rff M2ti bii2b 7Q` bii2 8
@R- @R- @R- d- @R- @Rff M2ti bii2b 7Q` bii2 e
@R- 3- @R- d- @R- @Rff M2ti bii2b 7Q` bii2 d
@R- 3- @R- @R- @R- @Rff M2ti bii2b 7Q` bii2 3
'c
BMi bii2 4 yc
7Q` UmiQ +? , bV &
AMTmihvT2 BMTmihvT2 4 ALoGA.c
B7 UBbbT+2U+?VV
BMTmihvT2 4 aS*1c
2Hb2 B7 U+? 44 ^Y^ %% +? 44 ^@^V
BMTmihvT2 4 aA:Lc
2Hb2 B7 UBb/B;BiU+?VV
BMTmihvT2 4 .A:Ahc
2Hb2 B7 U+? 44 ^X^V
BMTmihvT2 4 .Phc
2Hb2 B7 U+? 44 ^2^ %% +? 44 ^1^V
BMTmihvT2 4 1sSPL1Lhc
ff :2i M2ti bii2 7`QK +m``2Mi bii2 M/ BMTmi bvK#QH
bii2 4 i`MbBiBQMh#H2(bii2)(BMTmihvT2)c
ff AMpHB/ BMTmi
B7 Ubii2 44 @RV `2im`M 7Hb2c
'
ff A7 i?2 +m``2Mi bii2 #2HQM;b iQ QM2 Q7 i?2 ++2TiBM; U7BMHV bii2bff i?2M i?2 MmK#2` Bb pHB/
`2im`M bii2 44 R %% bii2 44 9 %% bii2 44 d %% bii2 44 3c
'c
'
strtod()
ff G22i*Q/2- oHB/ LmK#2`
ff !mi?Q`
U?iiT,ffr2B#QX+QKfHBM+?2M;xDmV
ff
bi`iQ/UV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbLmK#2` U+QMbi bi`BM; bV &
72
`2im`M BbLmK#2`UbX+nbi`UVVc
'
T`Bpi2,
#QQH BbLmK#2` U+?` +QMbi bV &
+?` 2M/Ti`c
bi`iQ/ Ub- 2M/Ti`Vc
B7 U2M/Ti` 44 bV `2im`M 7Hb2c
7Q` Uc 2M/Ti`c YY2M/Ti`V
B7 U5BbbT+2 U 2M/Ti`VV `2im`M 7Hb2c
'
'c
`2im`M i`m2c
3.10 Integer to Roman
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
ff G22i*Q/2- AMi2;2` iQ _QKM
ff
PUMmKV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; BMihQ_QKMUBMi MmKV &
+QMbi BMi `/Bt() 4 &Ryyy- Nyy- 8yy- 9yy- Ryy- Ny8y- 9y- Ry- N- 8- 9- R'c
+QMbi bi`BM; bvK#QH() 4 &]J]- ]*J]- ].]- ]*.]- ]*]- ]s*]]G]- ]sG]- ]s]- ]As]- ]o]- ]Ao]- ]A]'c
bi`BM; `QKMc
7Q` UbBx2ni B 4 yc MmK = yc YYBV &
BMi +QmMi 4 MmK f `/Bt(B)c
MmK W4 `/Bt(B)c
7Q` Uc +QmMi = yc @@+QmMiV `QKM Y4 bvK#QH(B)c
73
3.11 Roman to Integer
'c
'
'
`2im`M `QKMc
Roman to Integer,
3.11
3.11 Roman to Integer
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Ao 4 8 R
oA 4 8 Y R- AA4RYR
ff G22i*Q/2- _QKM iQ AMi2;2`
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMHBM2 BMi KTU+QMbi +?` +V &
brBi+? U+V &
+b2 ^A^, `2im`M Rc
+b2 ^o^, `2im`M 8c
+b2 ^s^, `2im`M Ryc
+b2 ^G^, `2im`M 8yc
+b2 ^*^, `2im`M Ryyc
+b2 ^.^, `2im`M 8yyc
+b2 ^J^, `2im`M Ryyyc
/27mHi, `2im`M yc
'
'
BMi `QKMhQAMiU+QMbi bi`BM; bV &
BMi `2bmHi 4 yc
7Q` UbBx2ni B 4 yc B I bXbBx2UVc BYYV &
B7 UB = y KTUb(B)V = KTUb(B @ R)VV &
`2bmHi Y4 UKTUb(B)V @ k
KTUb(B @ R)VVc
' 2Hb2 &
74
'
'c
'
`2bmHi Y4 KTUb(B)Vc
'
`2im`M `2bmHic
Integer to Roman,
3.10
3.12 Count and Say
The count-and-say sequence is the sequence of integers beginning as follows:
R- RR- kR- RkRR- RRRkkR- XXX
R is read off as ]QM2 R] or RR.
RR is read off as ]irQ Rb] or kR.
kR is read off as ]QM2 k], then ]QM2 R] or RkRR.
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
ff G22i*Q/2- *QmMi M/ av
ff !mi?Q`
U?iiT,ffr2B#QX+QKfHBM+?2M;xDmV
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; +QmMiM/avUBMi MV &
bi`BM; bU]R]Vc
r?BH2 U@@MV
b 4 ;2iL2tiUbVc
'
`2im`M bc
bi`BM; ;2iL2tiU+QMbi bi`BM; bV &
bi`BM;bi`2K bbc
75
3.13 Anagrams
7Q` UmiQ B 4 bX#2;BMUVc B 54 bX2M/UVc V &
miQ D 4 7BM/nB7UB- bX2M/UV- #BM/RbiUMQin2[mHniQI+?`=UVbb II /BbiM+2UB- DV II Bc
B 4 Dc
'
'
'c
BVVc
`2im`M bbXbi`UVc
3.13 Anagrams
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
]/Q`KBiQ`v]
Anagram
]/B`iv `QQK]
]i2]
]2i]
anagrams
ff G22i*Q/2- M;`Kb
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ibi`BM;= M;`KbUp2+iQ`Ibi`BM;= bi`bV &
mMQ`/2`2/nKTIbi`BM;- p2+iQ`Ibi`BM;= = ;`QmTc
7Q` U+QMbi miQ b , bi`bV &
bi`BM; F2v 4 bc
bQ`iUF2vX#2;BMUV- F2vX2M/UVVc
;`QmT(F2v)XTmb?n#+FUbVc
'
p2+iQ`Ibi`BM;= `2bmHic
7Q` UmiQ Bi 4 ;`QmTX+#2;BMUVc Bi 54 ;`QmTX+2M/UVc BiYYV &
B7 UBi@=b2+QM/XbBx2UV = RV
`2bmHiXBMb2`iU`2bmHiX2M/UV- Bi@=b2+QM/X#2;BMUV- Bi@=b2+QM/X2M/UVVc
'
76
'
'c
`2im`M `2bmHic
3.14 Simplify Path
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = ]f?QK2f], => ]f?QK2]
path = ]ffXf#fXXfXXf+f], => ]f+]
Corner Cases:
Did you consider the case where path = ]fXXf]? In this case, you should return ]f].
Another corner case is the path might contain multiple slashes ^f^ together, such as ]f?QK2ff7QQf].
In this case, you should ignore redundant slashes and return ]f?QK2f7QQ].
ff G22i*Q/2- aBKTHB7v Si?
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; bBKTHB7vSi?U+QMbi bi`BM; Ti?V &
p2+iQ`Ibi`BM;= /B`bc ff
7Q` UmiQ B 4 Ti?X#2;BMUVc B 54 Ti?X2M/UVcV &
YYBc
miQ D 4 7BM/UB- Ti?X2M/UV- ^f^Vc
miQ /B` 4 bi`BM;UB- DVc
B7 U5/B`X2KTivUV /B` 54 ]X]V &ff
B7 U/B` 44 ]XX]V &
B7 U5/B`bX2KTivUVV
/B`bXTQTn#+FUVc
^fff^
/B`
3.15 Length of Last Word
'
77
' 2Hb2
/B`bXTmb?n#+FU/B`Vc
B 4 Dc
'
bi`BM;bi`2K Qmic
B7 U/B`bX2KTivUVV &
Qmi II ]f]c
' 2Hb2 &
7Q` UmiQ /B` , /B`bV
Qmi II ^f^ II /B`c
'
'
'c
`2im`M QmiXbi`UVc
3.15 Length of Last Word
Given a string s consists of upper/lower-case alphabets and empty space characters ^ ^, return the length
of last word in the string.
If the last word does not exist, return 0.
Note: A word is defined as a character sequence consists of non-space characters only.
For example, Given b 4 ]>2HHQ qQ`H/], return 5.
STL
ff G22i*Q/2- G2M;i? Q7 Gbi qQ`/
ff
ahG
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi H2M;i?P7GbiqQ`/U+QMbi bi`BM; bV &
miQ 7B`bi 4 7BM/nB7UbX`#2;BMUV- bX`2M/UV- ,,BbHT?Vc
miQ Hbi 4 7BM/nB7nMQiU7B`bi- bX`2M/UV- ,,BbHT?Vc
78
'c
'
`2im`M /BbiM+2U7B`bi- HbiVc
ff G22i*Q/2- G2M;i? Q7 Gbi qQ`/
ff
rQ`/
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi H2M;i?P7GbiqQ`/U+QMbi bi`BM; bV &
`2im`M H2M;i?P7GbiqQ`/UbX+nbi`UVVc
'
T`Bpi2,
BMi H2M;i?P7GbiqQ`/U+QMbi +?` bV &
BMi H2M 4 yc
r?BH2 U bV &
B7 U bYY 54 ^ ^V
YYH2Mc
2Hb2 B7 U b b 54 ^ ^V
H2M 4 yc
'
`2im`M H2Mc
'
'c
4.1
4.1.1 Valid Parentheses
Given a string containing just the characters ^U^- ^V^- ^&^- ^'^- ^(^ and ^)^, determine if the
input string is valid.
The brackets must close in the correct order, ]UV] and ]UV()] are all valid but ]U)] and ]U(V)] are
not.
ff G22i*Q/2- oHB/ S`2Mi?2b2b
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BboHB/ Ubi`BM; +QMbi bV &
bi`BM; H27i 4 ]U(&]c
bi`BM; `B;?i 4 ]V)']c
bi+FI+?`= biFc
7Q` UmiQ + , bV &
B7 UH27iX7BM/U+V 54 bi`BM;,,MTQbV &
biFXTmb? U+Vc
' 2Hb2 &
B7 UbiFX2KTiv UV %% biFXiQT UV 54 H27i(`B;?iX7BM/ U+V)V
`2im`M 7Hb2c
2Hb2
biFXTQT UVc
'
'
79
80
'c
'
`2im`M biFX2KTivUVc
Generate Parentheses,
10.9
Longest Valid Parentheses,
4.1.2
4.1.2 Longest Valid Parentheses
Given a string containing just the characters ^U^ and ^V^, find the length of the longest valid (wellformed) parentheses substring.
For ]UUV], the longest valid parentheses substring is ]UV], which has length = 2.
Another example is ]VUVUVV], where the longest valid parentheses substring is ]UVUV], which has
length = 4.
ff G22i*Q/2- GQM;2bi oHB/ S`2Mi?2b2
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi HQM;2bioHB/S`2Mi?2b2bU+QMbi bi`BM; bV &
BMi KtnH2M 4 y- Hbi 4 @Rc ff i?2 TQbBiBQM Q7 i?2 Hbi ^V^
bi+FIBMi= H27ibc ff F22T i`+F Q7 i?2 TQbBiBQMb Q7 MQM@Ki+?BM; ^U^b
7Q` UBMi B 4 yc B I bXbBx2UVc YYBV &
B7 Ub(B) 44^U^V &
H27ibXTmb?UBVc
' 2Hb2 &
B7 UH27ibX2KTivUVV &
ff MQ Ki+?BM; H27i
Hbi 4 Bc
' 2Hb2 &
ff 7BM/ Ki+?BM; TB`
H27ibXTQTUVc
B7 UH27ibX2KTivUVV &
KtnH2M 4 KtUKtnH2M- B@HbiVc
' 2Hb2 &
KtnH2M 4 KtUKtnH2M- B@H27ibXiQTUVVc
81
4.1
'
'c
'
'
'
'
`2im`M KtnH2Mc
Dynamic Programming, One Pass
ff G22i*Q/2- GQM;2bi oHB/ S`2Mi?2b2
ff
PUMV
PUMV
ff !mi?Q`
U?iiT,ffr2B#QX+QKfrDbQMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi HQM;2bioHB/S`2Mi?2b2bU+QMbi bi`BM; bV &
p2+iQ`IBMi= 7UbXbBx2UV- yVc
BMi `2i 4 yc
7Q` UBMi B 4 bXbBx2UV @ kc B =4 yc @@BV &
BMi Ki+? 4 B Y 7(B Y R) Y Rc
ff +b2, ]UUXXXVV]
B7 Ub(B) 44 ^U^ Ki+? I bXbBx2UV b(Ki+?) 44 ^V^V &
7(B) 4 7(B Y R) Y kc
ff B7 pHB/ b2[m2M+2 2tBbi 7i2`r`/b ]UUXXXVVUV]
B7 UKi+? Y R I bXbBx2UVV 7(B) Y4 7(Ki+? Y R)c
'
`2i 4 KtU`2i- 7(B)Vc
'
`2im`M `2ic
'
'c
ff G22i*Q/2- GQM;2bi oHB/ S`2Mi?2b2
ff
PUMV
PURV
ff !mi?Q`
U?iiT,ffr2B#QX+QKf+T+bV
+Hbb aQHmiBQM &
Tm#HB+,
BMi HQM;2bioHB/S`2Mi?2b2bU+QMbi bi`BM; bV &
BMi Mbr2` 4 y- /2Ti? 4 y- bi`i 4 @Rc
7Q` UBMi B 4 yc B I bXbBx2UVc YYBV &
B7 Ub(B) 44 ^U^V &
YY/2Ti?c
' 2Hb2 &
@@/2Ti?c
B7 U/2Ti? I yV &
bi`i 4 Bc
/2Ti? 4 yc
' 2Hb2 B7 U/2Ti? 44 yV &
Mbr2` 4 KtUMbr2`- B @ bi`iVc
'
82
'
'c
'
'
/2Ti? 4 yc
bi`i 4 bXbBx2UVc
7Q` UBMi B 4 bXbBx2UV @ Rc B =4 yc @@BV &
B7 Ub(B) 44 ^V^V &
YY/2Ti?c
' 2Hb2 &
@@/2Ti?c
B7 U/2Ti? I yV &
bi`i 4 Bc
/2Ti? 4 yc
' 2Hb2 B7 U/2Ti? 44 yV &
Mbr2` 4 KtUMbr2`- bi`i @ BVc
'
'
'
`2im`M Mbr2`c
Valid Parentheses,
Generate Parentheses,
4.1.1
10.9
4.1.3 Largest Rectangle in Histogram
Given n non-negative integers representing the histograms bar height where the width of each bar is 1,
find the area of largest rectangle in the histogram.
4-1
Above is a histogram where width of each bar is 1, given height = (k-R-8-e-k-j).
83
4.1
4-2
The largest rectangle is shown in the shaded area, which has area = 10 unit.
For example, Given height = (k-R-8-e-k-j), return 10.
Container With Most Water(12.6)
O(n2 )
4-2
i=4
3
3
3
4
ff G22i*Q/2- G`;2bi _2+iM;H2 BM >BbiQ;`K
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi H`;2bi_2+iM;H2`2Up2+iQ`IBMi= ?2B;?iV &
bi+FIBMi= bc
?2B;?iXTmb?n#+FUyVc
BMi `2bmHi 4 yc
7Q` UBMi B 4 yc B I ?2B;?iXbBx2UVc V &
B7 UbX2KTivUV %% ?2B;?i(B) = ?2B;?i(bXiQTUV)V
bXTmb?UBYYVc
2Hb2 &
BMi iKT 4 bXiQTUVc
bXTQTUVc
`2bmHi 4 KtU`2bmHi?2B;?i(iKT)
UbX2KTivUV \ B , B @ bXiQTUV @ RVVc
'
'
`2im`M `2bmHic
84
'c
'
Trapping Rain Water, 2.1.15
Container With Most Water, 12.6
4.1.4 Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are Y- @-
- f. Each operand may be an integer or another expression.
Some examples:
(]k]- ]R]- ]Y]- ]j]- ] ]) @= UUk Y RV
jV @= N
(]9]- ]Rj]- ]8]- ]f]- ]Y]) @= U9 Y URj f 8VV @= e
ff G22i*Q/2- 1pHmi2 _2p2`b2 SQHBb? LQiiBQM
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
BMi 2pH_SLUp2+iQ`Ibi`BM;= iQF2MbV &
BMi t- vc
miQ iQF2M 4 iQF2MbX#+FUVc iQF2MbXTQTn#+FUVc
B7 UBbnQT2`iQ`UiQF2MVV &
v 4 2pH_SLUiQF2MbVc
t 4 2pH_SLUiQF2MbVc
B7 UiQF2M(y) 44 ^Y^V
t Y4 vc
2Hb2 B7 UiQF2M(y) 44 ^@^V t @4 vc
2Hb2 B7 UiQF2M(y) 44 ^ ^V t 4 vc
2Hb2
t f4 vc
' 2Hb2 &
bBx2ni Bc
t 4 biQBUiQF2M- BVc
'
`2im`M tc
'
T`Bpi2,
#QQH BbnQT2`iQ`U+QMbi bi`BM; QTV &
`2im`M QTXbBx2UV 44 R bi`BM;U]Y@ f]VX7BM/UQTV 54 bi`BM;,,MTQbc
'
'c
85
4.2
ff G22i*Q/2- Jt SQBMib QM GBM2
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
BMi 2pH_SLUp2+iQ`Ibi`BM;= iQF2MbV &
bi+FIbi`BM;= bc
7Q` UmiQ iQF2M , iQF2MbV &
B7 U5BbnQT2`iQ`UiQF2MVV &
bXTmb?UiQF2MVc
' 2Hb2 &
BMi v 4 biQBUbXiQTUVVc
bXTQTUVc
BMi t 4 biQBUbXiQTUVVc
bXTQTUVc
B7 UiQF2M(y) 44 ^Y^V
t Y4 vc
2Hb2 B7 UiQF2M(y) 44 ^@^V t @4 vc
2Hb2 B7 UiQF2M(y) 44 ^ ^V t 4 vc
2Hb2
t f4 vc
bXTmb?UiQnbi`BM;UtVVc
'
'
`2im`M biQBUbXiQTUVVc
'
T`Bpi2,
#QQH BbnQT2`iQ`U+QMbi bi`BM; QTV &
`2im`M QTXbBx2UV 44 R bi`BM;U]Y@ f]VX7BM/UQTV 54 bi`BM;,,MTQbc
'
'c
4.2
LeetCode
ff
bi`m+i h`22LQ/2 &
BMi pHc
h`22LQ/2 H27ic
h`22LQ/2 `B;?ic
h`22LQ/2UBMi tV , pHUtV- H27iUMmHHTi`V- `B;?iUMmHHTi`V & '
'c
5.1
(root->left->right) root->right->left
>right->root) right->left->root
(left->root->right)
5.1.1 Binary Tree Preorder Traversal
Given a binary tree, return the preorder traversal of its nodes values.
For example: Given binary tree &R-O-k-j',
R
(left-
$
k
f
return (R-k-j).
Note: Recursive solution is trivial, could you do it iteratively?
86
87
5.1
Morris
ff G22i*Q/2- "BM`v h`22 S`2Q`/2` h`p2`bH
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= T`2Q`/2`h`p2`bHUh`22LQ/2 `QQiV &
p2+iQ`IBMi= `2bmHic
bi+FI+QMbi h`22LQ/2 = bc
B7 U`QQi 54 MmHHTi`V bXTmb?U`QQiVc
r?BH2 U5bX2KTivUVV &
+QMbi h`22LQ/2 T 4 bXiQTUVc
bXTQTUVc
`2bmHiXTmb?n#+FUT@=pHVc
B7 UT@=`B;?i 54 MmHHTi`V bXTmb?UT@=`B;?iVc
B7 UT@=H27i 54 MmHHTi`V bXTmb?UT@=H27iVc
'c
'
'
`2im`M `2bmHic
Morris
ff G22i*Q/2- "BM`v h`22 S`2Q`/2` h`p2`bH
ff JQ``Bb
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= T`2Q`/2`h`p2`bHUh`22LQ/2 `QQiV &
p2+iQ`IBMi= `2bmHic
h`22LQ/2 +m` 4 `QQi- T`2p 4 MmHHTi`c
r?BH2 U+m` 54 MmHHTi`V &
B7 U+m`@=H27i 44 MmHHTi`V &
`2bmHiXTmb?n#+FU+m`@=pHVc
T`2p 4 +m`c f +m`
f
+m` 4 +m`@=`B;?ic
' 2Hb2 &
f
f
h`22LQ/2 MQ/2 4 +m`@=H27ic
r?BH2 UMQ/2@=`B;?i 54 MmHHTi` MQ/2@=`B;?i 54 +m`V
MQ/2 4 MQ/2@=`B;?ic
B7 UMQ/2@=`B;?i 44 MmHHTi`V & f
`2bmHiXTmb?n#+FU+m`@=pHVc f
MQ/2@=`B;?i 4 +m`c
T`2p 4 +m`c f +m`
f
f
88
5
+m` 4 +m`@=H27ic
' 2Hb2 &
f
MQ/2@=`B;?i 4 MmHHTi`c
f T`2p 4 +m`c
+m` 4 +m`@=`B;?ic
'
'
'c
f
+m`
'
'
`2im`M `2bmHic
Binary Tree Inorder Traversal
Binary Tree Postorder Traversal
Recover Binary Search Tree
5.1.2
5.1.3
5.1.7
5.1.2 Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes values.
For example: Given binary tree &R-O-k-j',
R
$
k
f
return (R-j-k).
Note: Recursive solution is trivial, could you do it iteratively?
Morris
ff G22i*Q/2- "BM`v h`22 AMQ`/2` h`p2`bH
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= BMQ`/2`h`p2`bHUh`22LQ/2 `QQiV &
p2+iQ`IBMi= `2bmHic
bi+FI+QMbi h`22LQ/2 = bc
+QMbi h`22LQ/2 T 4 `QQic
89
5.1
'c
'
r?BH2 U5bX2KTivUV %% T 54 MmHHTi`V &
B7 UT 54 MmHHTi`V &
bXTmb?UTVc
T 4 T@=H27ic
' 2Hb2 &
T 4 bXiQTUVc
bXTQTUVc
`2bmHiXTmb?n#+FUT@=pHVc
T 4 T@=`B;?ic
'
'
`2im`M `2bmHic
Morris
ff G22i*Q/2- "BM`v h`22 AMQ`/2` h`p2`bH
ff JQ``Bb
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= BMQ`/2`h`p2`bHUh`22LQ/2 `QQiV &
p2+iQ`IBMi= `2bmHic
h`22LQ/2 +m` 4 `QQi- T`2p 4 MmHHTi`c
r?BH2 U+m` 54 MmHHTi`V &
B7 U+m`@=H27i 44 MmHHTi`V &
`2bmHiXTmb?n#+FU+m`@=pHVc
T`2p 4 +m`c
+m` 4 +m`@=`B;?ic
' 2Hb2 &
f
f
h`22LQ/2 MQ/2 4 +m`@=H27ic
r?BH2 UMQ/2@=`B;?i 54 MmHHTi` MQ/2@=`B;?i 54 +m`V
MQ/2 4 MQ/2@=`B;?ic
B7 UMQ/2@=`B;?i 44 MmHHTi`V & f
MQ/2@=`B;?i 4 +m`c
f T`2p 4 +m`c
+m`
+m` 4 +m`@=H27ic
' 2Hb2 &
f
`2bmHiXTmb?n#+FU+m`@=pHVc
MQ/2@=`B;?i 4 MmHHTi`c
T`2p 4 +m`c
+m` 4 +m`@=`B;?ic
'
'c
'
'
'
`2im`M `2bmHic
f
f
f
90
Binary Tree Preorder Traversal
Binary Tree Postorder Traversal
Recover Binary Search Tree
5.1.1
5.1.3
5.1.7
5.1.3 Binary Tree Postorder Traversal
Given a binary tree, return the postorder traversal of its nodes values.
For example: Given binary tree &R-O-k-j',
R
$
k
f
return (j-k-R).
Note: Recursive solution is trivial, could you do it iteratively?
Morris
ff G22i*Q/2- "BM`v h`22 SQbiQ`/2` h`p2`bH
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= TQbiQ`/2`h`p2`bHUh`22LQ/2 `QQiV &
p2+iQ`IBMi= `2bmHic
bi+FI+QMbi h`22LQ/2 = bc
f T
[
f
+QMbi h`22LQ/2 T 4 `QQi- [ 4 MmHHTi`c
/Q &
r?BH2 UT 54 MmHHTi`V & f
bXTmb?UTVc
T 4 T@=H27ic
'
[ 4 MmHHTi`c
r?BH2 U5bX2KTivUVV &
T 4 bXiQTUVc
bXTQTUVc
f
B7 UT@=`B;?i 44 [V &
91
5.1
`2bmHiXTmb?n#+FUT@=pHVc
[ 4 Tc f
' 2Hb2 &
f
bXTmb?UTVc
f
f
T 4 T@=`B;?ic
#`2Fc
'
f
f
'
' r?BH2 U5bX2KTivUVVc
'c
'
`2im`M `2bmHic
Morris
ff G22i*Q/2- "BM`v h`22 SQbiQ`/2` h`p2`bH
ff JQ``Bb
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= TQbiQ`/2`h`p2`bHUh`22LQ/2 `QQiV &
p2+iQ`IBMi= `2bmHic
h`22LQ/2 /mKKvU@RVc
h`22LQ/2 +m`- T`2p 4 MmHHTi`c
bi/,,7mM+iBQM I pQB/U+QMbi h`22LQ/2 V= pBbBi 4
(`2bmHi)U+QMbi h`22LQ/2 MQ/2V&
`2bmHiXTmb?n#+FUMQ/2@=pHVc
'c
/mKKvXH27i 4 `QQic
+m` 4 /mKKvc
r?BH2 U+m` 54 MmHHTi`V &
B7 U+m`@=H27i 44 MmHHTi`V &
T`2p 4 +m`c f
f
+m` 4 +m`@=`B;?ic
' 2Hb2 &
h`22LQ/2 MQ/2 4 +m`@=H27ic
r?BH2 UMQ/2@=`B;?i 54 MmHHTi` MQ/2@=`B;?i 54 +m`V
MQ/2 4 MQ/2@=`B;?ic
'
B7 UMQ/2@=`B;?i 44 MmHHTi`V & f
MQ/2@=`B;?i 4 +m`c
T`2p 4 +m`c f
f
+m` 4 +m`@=H27ic
' 2Hb2 & f
pBbBin`2p2`b2U+m`@=H27i- T`2p- pBbBiVc
T`2p@=`B;?i 4 MmHHTi`c
T`2p 4 +m`c f
f
+m` 4 +m`@=`B;?ic
'
92
5
'
`2im`M `2bmHic
'
T`Bpi2,
ff
biiB+ pQB/ `2p2`b2Uh`22LQ/2 7`QK- h`22LQ/2 iQV &
h`22LQ/2 t 4 7`QK- v 4 7`QK@=`B;?i- xc
B7 U7`QK 44 iQV `2im`Mc
'
r?BH2 Ut 54 iQV &
x 4 v@=`B;?ic
v@=`B;?i 4 tc
t 4 vc
v 4 xc
'
ff
biiB+ pQB/ pBbBin`2p2`b2Uh`22LQ/2 7`QK- h`22LQ/2 iQbi/,,7mM+iBQMI pQB/U+QMbi h`22LQ/2 V = pBbBiV &
h`22LQ/2 T 4 iQc
`2p2`b2U7`QK- iQVc
r?BH2 Ui`m2V &
pBbBiUTVc
B7 UT 44 7`QKV
#`2Fc
T 4 T@=`B;?ic
'
'
'c
`2p2`b2UiQ- 7`QKVc
Binary Tree Preorder Traversal
Binary Tree Inorder Traversal
Recover Binary Search Tree
5.1.1
5.1.2
5.1.7
5.1.4 Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes values. (ie, from left to right, level by
level).
For example: Given binary tree &j-N-ky-O-O-R8-d',
93
5.1
j
f $
N ky
f $
R8
d
return its level order traversal as:
(
(j)(N-ky)(R8-d)
ff G22i*Q/2- "BM`v h`22 G2p2H P`/2` h`p2`bH
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = H2p2HP`/2`Uh`22LQ/2 `QQiV &
p2+iQ`Ip2+iQ`IBMi== `2bmHic
i`p2`b2U`QQi- R- `2bmHiVc
`2im`M `2bmHic
'
pQB/ i`p2`b2Uh`22LQ/2
B7 U5`QQiV `2im`Mc
`QQi- bBx2ni H2p2H- p2+iQ`Ip2+iQ`IBMi== `2bmHiV &
B7 UH2p2H = `2bmHiXbBx2UVV
`2bmHiXTmb?n#+FUp2+iQ`IBMi=UVVc
'c
'
`2bmHi(H2p2H@R)XTmb?n#+FU`QQi@=pHVc
i`p2`b2U`QQi@=H27i- H2p2HYR- `2bmHiVc
i`p2`b2U`QQi@=`B;?i- H2p2HYR- `2bmHiVc
ff G22i*Q/2- "BM`v h`22 G2p2H P`/2` h`p2`bH
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = H2p2HP`/2`Uh`22LQ/2 `QQiV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
[m2m2Ih`22LQ/2 = +m``2Mi- M2tic
94
5
B7U`QQi 44 MmHHTi`V &
`2im`M `2bmHic
' 2Hb2 &
+m``2MiXTmb?U`QQiVc
'
'c
'
r?BH2 U5+m``2MiX2KTivUVV &
p2+iQ`IBMi= H2p2Hc ff 2HK2Mib BM QM2 H2p2H
r?BH2 U5+m``2MiX2KTivUVV &
h`22LQ/2 MQ/2 4 +m``2MiX7`QMiUVc
+m``2MiXTQTUVc
H2p2HXTmb?n#+FUMQ/2@=pHVc
B7 UMQ/2@=H27i 54 MmHHTi`V M2tiXTmb?UMQ/2@=H27iVc
B7 UMQ/2@=`B;?i 54 MmHHTi`V M2tiXTmb?UMQ/2@=`B;?iVc
'
`2bmHiXTmb?n#+FUH2p2HVc
brTUM2ti- +m``2MiVc
'
`2im`M `2bmHic
Binary Tree Level Order Traversal II
Binary Tree Zigzag Level Order Traversal
5.1.5
5.1.6
5.1.5 Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes values. (ie, from left to right,
level by level from leaf to root).
For example: Given binary tree &j-N-ky-O-O-R8-d',
j
f $
N ky
f $
R8
d
return its bottom-up level order traversal as:
(
(R8-d)
(N-ky)(j)-
95
5.1
5.1.4
`2p2`b2UV
ff G22i*Q/2- "BM`v h`22 G2p2H P`/2` h`p2`bH AA
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = H2p2HP`/2`"QiiQKUh`22LQ/2 `QQiV &
p2+iQ`Ip2+iQ`IBMi== `2bmHic
i`p2`b2U`QQi- R- `2bmHiVc
bi/,,`2p2`b2U`2bmHiX#2;BMUV- `2bmHiX2M/UVVc ff
`2im`M `2bmHic
'
pQB/ i`p2`b2Uh`22LQ/2
B7 U5`QQiV `2im`Mc
`QQi- bBx2ni H2p2H- p2+iQ`Ip2+iQ`IBMi== `2bmHiV &
B7 UH2p2H = `2bmHiXbBx2UVV
`2bmHiXTmb?n#+FUp2+iQ`IBMi=UVVc
'c
'
`2bmHi(H2p2H@R)XTmb?n#+FU`QQi@=pHVc
i`p2`b2U`QQi@=H27i- H2p2HYR- `2bmHiVc
i`p2`b2U`QQi@=`B;?i- H2p2HYR- `2bmHiVc
ff G22i*Q/2- "BM`v h`22 G2p2H P`/2` h`p2`bH AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = H2p2HP`/2`"QiiQKUh`22LQ/2
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
B7U`QQi 44 MmHHTi`V `2im`M `2bmHic
`QQiV &
[m2m2Ih`22LQ/2 = +m``2Mi- M2tic
p2+iQ`IBMi= H2p2Hc ff 2HK2Mib BM H2p2H H2p2H
+m``2MiXTmb?U`QQiVc
r?BH2 U5+m``2MiX2KTivUVV &
r?BH2 U5+m``2MiX2KTivUVV &
h`22LQ/2 MQ/2 4 +m``2MiX7`QMiUVc
+m``2MiXTQTUVc
H2p2HXTmb?n#+FUMQ/2@=pHVc
B7 UMQ/2@=H27i 54 MmHHTi`V M2tiXTmb?UMQ/2@=H27iVc
B7 UMQ/2@=`B;?i 54 MmHHTi`V M2tiXTmb?UMQ/2@=`B;?iVc
'
`2bmHiXTmb?n#+FUH2p2HVc
96
5
H2p2HX+H2`UVc
brTUM2ti- +m``2MiVc
'c
'
'
`2p2`b2U`2bmHiX#2;BMUV- `2bmHiX2M/UVVc ff
`2im`M `2bmHic
Binary Tree Level Order Traversal
5.1.4
Binary Tree Zigzag Level Order Traversal
5.1.6
5.1.6 Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes values. (ie, from left to right,
then right to left for the next level and alternate between).
For example: Given binary tree j-N-ky-O-O-R8-d,
j
f $
N ky
f $
R8
d
return its zigzag level order traversal as:
(
(j)(ky-N)(R8-d)
bool
ff G22i*Q/2- "BM`v h`22 wB;x; G2p2H P`/2` h`p2`bH
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = xB;x;G2p2HP`/2`Uh`22LQ/2 `QQiV &
p2+iQ`Ip2+iQ`IBMi== `2bmHic
i`p2`b2U`QQi- R- `2bmHi- i`m2Vc
`2im`M `2bmHic
97
5.1
'
pQB/ i`p2`b2Uh`22LQ/2 `QQi- bBx2ni H2p2H- p2+iQ`Ip2+iQ`IBMi== `2bmHi#QQH H27iniQn`B;?iV &
B7 U5`QQiV `2im`Mc
B7 UH2p2H = `2bmHiXbBx2UVV
`2bmHiXTmb?n#+FUp2+iQ`IBMi=UVVc
B7 UH27iniQn`B;?iV
`2bmHi(H2p2H@R)XTmb?n#+FU`QQi@=pHVc
2Hb2
`2bmHi(H2p2H@R)XBMb2`iU`2bmHi(H2p2H@R)X#2;BMUV- `QQi@=pHVc
'c
'
i`p2`b2U`QQi@=H27i- H2p2HYR- `2bmHi- 5H27iniQn`B;?iVc
i`p2`b2U`QQi@=`B;?i- H2p2HYR- `2bmHi- 5H27iniQn`B;?iVc
ffG22i*Q/2- "BM`v h`22 wB;x; G2p2H P`/2` h`p2`bH
ff
#QQH
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = xB;x;G2p2HP`/2`Uh`22LQ/2 `QQiV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
[m2m2Ih`22LQ/2 = +m``2Mi- M2tic
#QQH H27iniQn`B;?i 4 i`m2c
B7U`QQi 44 MmHHTi`V &
`2im`M `2bmHic
' 2Hb2 &
+m``2MiXTmb?U`QQiVc
'
'
r?BH2 U5+m``2MiX2KTivUVV &
p2+iQ`IBMi= H2p2Hc ff 2HK2Mib BM QM2 H2p2H
r?BH2 U5+m``2MiX2KTivUVV &
h`22LQ/2 MQ/2 4 +m``2MiX7`QMiUVc
+m``2MiXTQTUVc
H2p2HXTmb?n#+FUMQ/2@=pHVc
B7 UMQ/2@=H27i 54 MmHHTi`V M2tiXTmb?UMQ/2@=H27iVc
B7 UMQ/2@=`B;?i 54 MmHHTi`V M2tiXTmb?UMQ/2@=`B;?iVc
'
B7 U5H27iniQn`B;?iV `2p2`b2UH2p2HX#2;BMUV- H2p2HX2M/UVVc
`2bmHiXTmb?n#+FUH2p2HVc
H27iniQn`B;?i 4 5H27iniQn`B;?ic
brTUM2ti- +m``2MiVc
'
`2im`M `2bmHic
98
'c
Binary Tree Level Order Traversal
Binary Tree Level Order Traversal II
5.1.4
5.1.5
5.1.7 Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Note: A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?
O(n)
Morris
O(n)
ff G22i*Q/2- _2+Qp2` "BM`v a2`+? h`22
ff JQ``Bb
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ `2+Qp2`h`22Uh`22LQ/2 `QQiV &
TB`Ih`22LQ/2 - h`22LQ/2 = #`QF2Mc
h`22LQ/2 T`2p 4 MmHHTi`c
h`22LQ/2 +m` 4 `QQic
PURV
r?BH2 U+m` 54 MmHHTi`V &
B7 U+m`@=H27i 44 MmHHTi`V &
/2i2+iU#`QF2M- T`2p- +m`Vc
T`2p 4 +m`c
+m` 4 +m`@=`B;?ic
' 2Hb2 &
miQ MQ/2 4 +m`@=H27ic
r?BH2 UMQ/2@=`B;?i 54 MmHHTi` MQ/2@=`B;?i 54 +m`V
MQ/2 4 MQ/2@=`B;?ic
B7 UMQ/2@=`B;?i 44 MmHHTi`V &
MQ/2@=`B;?i 4 +m`c
ffT`2p 4 +m`c
+m`
99
5.1
'
'
'c
'
+m` 4 +m`@=H27ic
' 2Hb2 &
/2i2+iU#`QF2M- T`2p- +m`Vc
MQ/2@=`B;?i 4 MmHHTi`c
T`2p 4 +m`c
+m` 4 +m`@=`B;?ic
'
brTU#`QF2MX7B`bi@=pH- #`QF2MXb2+QM/@=pHVc
pQB/ /2i2+iUTB`Ih`22LQ/2 - h`22LQ/2 = #`QF2M- h`22LQ/2 T`2ph`22LQ/2 +m``2MiV &
B7 UT`2p 54 MmHHTi` T`2p@=pH = +m``2Mi@=pHV &
B7 U#`QF2MX7B`bi 44 MmHHTi`V &
#`QF2MX7B`bi 4 T`2pc
' ff
2Hb2
&y-R'
brT
b2+QM/
MmHHTi`
ff
_mMiBK2 1``Q`
#`QF2MXb2+QM/ 4 +m``2Mic
'
'
Binary Tree Inorder Traversal
5.1.2
5.1.8 Same Tree
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
ff G22i*Q/2- aK2 h`22
ff
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbaK2h`22Uh`22LQ/2
PUHQ;MV
T- h`22LQ/2
[V &
100
'c
'
B7 U5T 5[V `2im`M i`m2c
ff
B7 U5T %% 5[V `2im`M 7Hb2c ff
`2im`M T@=pH 44 [@=pH
ff
BbaK2h`22UT@=H27i- [@=H27iV
BbaK2h`22UT@=`B;?i- [@=`B;?iVc
ff G22i*Q/2- aK2 h`22
ff
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbaK2h`22Uh`22LQ/2
bi+FIh`22LQ/2 = bc
bXTmb?UTVc
bXTmb?U[Vc
PUHQ;MV
T- h`22LQ/2
[V &
r?BH2U5bX2KTivUVV &
T 4 bXiQTUVc bXTQTUVc
[ 4 bXiQTUVc bXTQTUVc
B7 U5T 5[V +QMiBMm2c
B7 U5T %% 5[V `2im`M 7Hb2c
B7 UT@=pH 54 [@=pHV `2im`M 7Hb2c
bXTmb?UT@=H27iVc
bXTmb?U[@=H27iVc
bXTmb?UT@=`B;?iVc
bXTmb?U[@=`B;?iVc
'c
'
'
`2im`M i`m2c
Symmetric Tree
5.1.9
5.1.9 Symmetric Tree
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
101
5.1
ff G22i*Q/2- avKK2i`B+ h`22
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbavKK2i`B+Uh`22LQ/2 `QQiV &
B7 U`QQi 44 MmHHTi`V `2im`M i`m2c
`2im`M BbavKK2i`B+U`QQi@=H27i- `QQi@=`B;?iVc
'
#QQH BbavKK2i`B+Uh`22LQ/2 T- h`22LQ/2 [V &
B7 UT 44 MmHHTi` [ 44 MmHHTi`V `2im`M i`m2c
B7 UT 44 MmHHTi` %% [ 44 MmHHTi`V `2im`M 7Hb2c
`2im`M T@=pH 44 [@=pH
ff
BbavKK2i`B+UT@=H27i- [@=`B;?iV
BbavKK2i`B+UT@=`B;?i- [@=H27iVc
'
'c
ff G22i*Q/2- avKK2i`B+ h`22
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbavKK2i`B+ Uh`22LQ/2 `QQiV &
B7 U5`QQiV `2im`M i`m2c
bi+FIh`22LQ/2 = bc
bXTmb?U`QQi@=H27iVc
bXTmb?U`QQi@=`B;?iVc
r?BH2 U5bX2KTiv UVV &
miQ T 4 bXiQT UVc bXTQTUVc
miQ [ 4 bXiQT UVc bXTQTUVc
B7 U5T 5[V +QMiBMm2c
B7 U5T %% 5[V `2im`M 7Hb2c
B7 UT@=pH 54 [@=pHV `2im`M 7Hb2c
bXTmb?UT@=H27iVc
bXTmb?U[@=`B;?iVc
'
bXTmb?UT@=`B;?iVc
bXTmb?U[@=H27iVc
`2im`M i`m2c
ff
ff
102
5
'
'c
Same Tree
5.1.8
5.1.10 Balanced Binary Tree
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two
subtrees of every node never differ by more than 1.
ff G22i*Q/2- "HM+2/ "BM`v h`22
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH Bb"HM+2/ Uh`22LQ/2 `QQiV &
`2im`M #HM+2/>2B;?i U`QQiV =4 yc
'
f
_2im`Mb i?2 ?2B;?i Q7 <`QQi< B7 <`QQi< Bb #HM+2/ i`22Qi?2`rBb2- `2im`Mb <@R<X
f
BMi #HM+2/>2B;?i Uh`22LQ/2 `QQiV &
B7 U`QQi 44 MmHHTi`V `2im`M yc ff
BMi H27i 4 #HM+2/>2B;?i U`QQi@=H27iVc
BMi `B;?i 4 #HM+2/>2B;?i U`QQi@=`B;?iVc
B7 UH27i I y %% `B;?i I y %% #bUH27i @ `B;?iV = RV `2im`M @Rc
'c
'
`2im`M KtUH27i- `B;?iV Y Rc ff
ff
103
5.1
5.1.11 Flatten Binary Tree to Linked List
Given a binary tree, flatten it to a linked list in-place.
For example, Given
R
f $
k
8
f $
$
j
9
e
The flattened tree should look like:
R
$
k
$
j
$
9
$
8
$
e
1
ff G22i*Q/2- 6Hii2M "BM`v h`22 iQ GBMF2/ GBbi
ff
R
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ 7Hii2MUh`22LQ/2 `QQiV &
B7 U`QQi 44 MmHHTi`V `2im`Mc ff
7Hii2MU`QQi@=H27iVc
7Hii2MU`QQi@=`B;?iVc
B7 UMmHHTi` 44 `QQi@=H27iV `2im`Mc
'c
'
ff
h`22LQ/2 T 4 `QQi@=H27ic
r?BH2UT@=`B;?iV T 4 T@=`B;?ic ff
T@=`B;?i 4 `QQi@=`B;?ic
`QQi@=`B;?i 4 `QQi@=H27ic
`QQi@=H27i 4 MmHHTi`c
`QQi
`QQi@=`B;?i
104
2
ff G22i*Q/2- 6Hii2M "BM`v h`22 iQ GBMF2/ GBbi
ff
k
ff !mi?Q`
U?iiT,ffr2B#QX+QKfmfRkj9N39R98V
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ 7Hii2MUh`22LQ/2 `QQiV &
7Hii2MU`QQi- LlGGVc
'
T`Bpi2,
ff
`QQi
iBH
h`22LQ/2 7Hii2MUh`22LQ/2 `QQi- h`22LQ/2 iBHV &
B7 ULlGG 44 `QQiV `2im`M iBHc
'c
'
`QQi@=`B;?i 4 7Hii2MU`QQi@=H27i- 7Hii2MU`QQi@=`B;?i- iBHVVc
`QQi@=H27i 4 LlGGc
`2im`M `QQic
ff G22i*Q/2- 6Hii2M "BM`v h`22 iQ GBMF2/ GBbi
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ 7Hii2MUh`22LQ/2 `QQiV &
B7 U`QQi 44 MmHHTi`V `2im`Mc
bi+FIh`22LQ/2 = bc
bXTmb?U`QQiVc
r?BH2 U5bX2KTivUVV &
miQ T 4 bXiQTUVc
bXTQTUVc
B7 UT@=`B;?iV
bXTmb?UT@=`B;?iVc
B7 UT@=H27iV
bXTmb?UT@=H27iVc
'c
'
'
T@=H27i 4 MmHHTi`c
B7 U5bX2KTivUVV
T@=`B;?i 4 bXiQTUVc
105
5.1
5.1.12 Populating Next Right Pointers in Each Node II
Follow up for problem Populating Next Right Pointers in Each Node.
What if the given tree could be any binary tree? Would your previous solution still work?
Note: You may only use constant extra space.
For example, Given the following binary tree,
R
f $
k
j
f $
$
9
8
d
After calling your function, the tree should look like:
R @= LlGG
f $
k @= j @= LlGG
f $
$
9@= 8 @= d @= LlGG
Populating Next Right Pointers in Each Node I.
ff G22i*Q/2- SQTmHiBM; L2ti _B;?i SQBMi2`b BM 1+? LQ/2 AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ +QMM2+iUh`22GBMFLQ/2 `QQiV &
B7 U`QQi 44 MmHHTi`V `2im`Mc
h`22GBMFLQ/2 /mKKvU@RVc
7Q` Uh`22GBMFLQ/2 +m`` 4 `QQi- T`2p 4 /mKKvc
+m``c +m`` 4 +m``@=M2tiV &
B7 U+m``@=H27i 54 MmHHTi`V&
T`2p@=M2ti 4 +m``@=H27ic
T`2p 4 T`2p@=M2tic
'
B7 U+m``@=`B;?i 54 MmHHTi`V&
106
5
T`2p@=M2ti 4 +m``@=`B;?ic
T`2p 4 T`2p@=M2tic
'
'c
'
'
+QMM2+iU/mKKvXM2tiVc
ff G22i*Q/2- SQTmHiBM; L2ti _B;?i SQBMi2`b BM 1+? LQ/2 AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ +QMM2+iUh`22GBMFLQ/2 `QQiV &
r?BH2 U`QQiV &
h`22GBMFLQ/2
M2ti 4 MmHHTi`c ff i?2 7B`bi MQ/2 Q7 M2ti H2p2H
h`22GBMFLQ/2
T`2p 4 MmHHTi`c ff T`2pBQmb MQ/2 QM i?2 bK2 H2p2H
7Q` Uc `QQic `QQi 4 `QQi@=M2tiV &
B7 U5M2tiV M2ti 4 `QQi@=H27i \ `QQi@=H27i , `QQi@=`B;?ic
B7 U`QQi@=H27iV &
B7 UT`2pV T`2p@=M2ti 4 `QQi@=H27ic
T`2p 4 `QQi@=H27ic
'
B7 U`QQi@=`B;?iV &
B7 UT`2pV T`2p@=M2ti 4 `QQi@=`B;?ic
T`2p 4 `QQi@=`B;?ic
'
'
'c
'
'
`QQi 4 M2tic ff im`M iQ M2ti H2p2H
Populating Next Right Pointers in Each Node
5.4.6
5.2
5.2.1 Construct Binary Tree from Preorder and Inorder Traversal
Given preorder and inorder traversal of a tree, construct the binary tree.
Note: You may assume that duplicates do not exist in the tree.
107
5.2
ff G22i*Q/2- *QMbi`m+i "BM`v h`22 7`QK S`2Q`/2` M/ AMQ`/2` h`p2`bH
ff
PUMV
PU$HQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
h`22LQ/2 #mBH/h`22Up2+iQ`IBMi= T`2Q`/2`- p2+iQ`IBMi= BMQ`/2`V &
`2im`M #mBH/h`22U#2;BMUT`2Q`/2`V- 2M/UT`2Q`/2`V#2;BMUBMQ`/2`V- 2M/UBMQ`/2`VVc
'
i2KTHi2IivT2MK2 AMTmiAi2`iQ`=
h`22LQ/2 #mBH/h`22UAMTmiAi2`iQ` T`2n7B`bi- AMTmiAi2`iQ` T`2nHbiAMTmiAi2`iQ` BMn7B`bi- AMTmiAi2`iQ` BMnHbiV &
B7 UT`2n7B`bi 44 T`2nHbiV `2im`M MmHHTi`c
B7 UBMn7B`bi 44 BMnHbiV `2im`M MmHHTi`c
miQ `QQi 4 M2r h`22LQ/2U T`2n7B`biVc
miQ BM_QQiSQb 4 7BM/UBMn7B`bi- BMnHbi- T`2n7B`biVc
miQ H27iaBx2 4 /BbiM+2UBMn7B`bi- BM_QQiSQbVc
`QQi@=H27i 4 #mBH/h`22UM2tiUT`2n7B`biV- M2tiUT`2n7B`biH27iaBx2 Y RV- BMn7B`bi- M2tiUBMn7B`bi- H27iaBx2VVc
`QQi@=`B;?i 4 #mBH/h`22UM2tiUT`2n7B`bi- H27iaBx2 Y RV- T`2nHbiM2tiUBM_QQiSQbV- BMnHbiVc
'c
'
`2im`M `QQic
Construct Binary Tree from Inorder and Postorder Traversal
5.2.2
5.2.2 Construct Binary Tree from Inorder and Postorder Traversal
Given inorder and postorder traversal of a tree, construct the binary tree.
Note: You may assume that duplicates do not exist in the tree.
108
ff G22i*Q/2- *QMbi`m+i "BM`v h`22 7`QK AMQ`/2` M/ SQbiQ`/2` h`p2`bH
ff
PUMV
PU$HQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
h`22LQ/2 #mBH/h`22Up2+iQ`IBMi= BMQ`/2`- p2+iQ`IBMi= TQbiQ`/2`V &
`2im`M #mBH/h`22U#2;BMUBMQ`/2`V- 2M/UBMQ`/2`V#2;BMUTQbiQ`/2`V- 2M/UTQbiQ`/2`VVc
'
i2KTHi2IivT2MK2 "B/BAi=
h`22LQ/2 #mBH/h`22U"B/BAi BMn7B`bi- "B/BAi BMnHbi"B/BAi TQbin7B`bi- "B/BAi TQbinHbiV &
B7 UBMn7B`bi 44BMnHbiV `2im`M MmHHTi`c
B7 UTQbin7B`bi 44 TQbinHbiV `2im`M MmHHTi`c
+QMbi miQ pH 4 T`2pUTQbinHbiVc
h`22LQ/2 `QQi 4 M2r h`22LQ/2UpHVc
miQ BMn`QQinTQb 4 7BM/UBMn7B`bi- BMnHbi- pHVc
miQ H27inbBx2 4 /BbiM+2UBMn7B`bi- BMn`QQinTQbVc
miQ TQbinH27inHbi 4 M2tiUTQbin7B`bi- H27inbBx2Vc
`QQi@=H27i 4 #mBH/h`22UBMn7B`bi- BMn`QQinTQb- TQbin7B`bi- TQbinH27inHbiVc
`QQi@=`B;?i 4 #mBH/h`22UM2tiUBMn`QQinTQbV- BMnHbi- TQbinH27inHbiT`2pUTQbinHbiVVc
`2im`M `QQic
'
'c
Construct Binary Tree from Preorder and Inorder Traversal
5.2.1
5.3
5.3.1 Unique Binary Search Trees
Given n, how many structurally unique BSTs (binary search trees) that store values 1...n?
For example, Given n = 3, there are a total of 5 unique BSTs.
R
$
f
j
R
k
f
j
f
R
$
k
k
f $
R
j
$
j
109
5.3
R
$
$
j
f
k
f $
f
R
j
R
j
f
$
k
1
BST
1, 2, 3, ..., n
[1, i-1]
[i+1, n]
f (i)
Unique Binary Search Tree
[1, i]
BST
1
f (0) = 1
BST
f (1) = 1
1,2
R
k
f
f (2)
f (0) f (1)
f (1) f (0)
BST
f (3)
f (0) f (2)
f (1) f (1)
f (2) f (0)
f
f (i) =
i
)
k=1
f (k 1) f (i k)
ff G22i*Q/2- lMB[m2 "BM`v a2`+? h`22b
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
110
Tm#HB+,
BMi MmKh`22bUBMi MV &
p2+iQ`IBMi= 7UM Y R- yVc
7(y) 4 Rc
7(R) 4 Rc
7Q` UBMi B 4 kc B I4 Mc YYBV &
7Q` UBMi F 4 Rc F I4 Bc YYFV
7(B) Y4 7(F@R)
7(B @ F)c
'
'c
'
`2im`M 7(M)c
Unique Binary Search Trees II
5.3.2
5.3.2 Unique Binary Search Trees II
Given n, generate all structurally unique BSTs (binary search trees) that store values 1...n.
For example, Given n = 3, your program should return all 5 unique BSTs shown below.
R
j
j
k
R
$
f
f
f $
$
j
k
R
R
j
k
f
f
$
$
k
R
k
j
ff G22i*Q/2- lMB[m2 "BM`v a2`+? h`22b AA
ff
hP.P
hP.P
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ih`22LQ/2 = ;2M2`i2h`22bUBMi MV &
B7 UM 44 yV `2im`M ;2M2`i2UR- yVc
`2im`M ;2M2`i2UR- MVc
'
T`Bpi2,
p2+iQ`Ih`22LQ/2 = ;2M2`i2UBMi bi`i- BMi 2M/V &
p2+iQ`Ih`22LQ/2 = bm#h`22c
B7 Ubi`i = 2M/V &
111
5.3
bm#h`22XTmb?n#+FUMmHHTi`Vc
`2im`M bm#h`22c
'c
'
'
7Q` UBMi F 4 bi`ic F I4 2M/c FYYV &
p2+iQ`Ih`22LQ/2 = H27iam#b 4 ;2M2`i2Ubi`i- F @ RVc
p2+iQ`Ih`22LQ/2 = `B;?iam#b 4 ;2M2`i2UF Y R- 2M/Vc
7Q` UmiQ B , H27iam#bV &
7Q` UmiQ D , `B;?iam#bV &
h`22LQ/2 MQ/2 4 M2r h`22LQ/2UFVc
MQ/2@=H27i 4 Bc
MQ/2@=`B;?i 4 Dc
bm#h`22XTmb?n#+FUMQ/2Vc
'
'
'
`2im`M bm#h`22c
Unique Binary Search Trees
5.3.1
5.3.3 Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than the nodes key.
The right subtree of a node contains only nodes with keys greater than the nodes key.
Both the left and right subtrees must also be binary search trees.
ff G22i*Q/2- oHB/i2 "BM`v a2`+? h`22
ff
PUMV
PU$HQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BboHB/"ahUh`22LQ/2 `QQiV &
`2im`M BboHB/"ahU`QQi- ALhnJAL- ALhnJsVc
'
#QQH BboHB/"ahUh`22LQ/2 `QQi- BMi HQr2`- BMi mTT2`V &
B7 U`QQi 44 MmHHTi`V `2im`M i`m2c
112
'c
'
`2im`M `QQi@=pH = HQr2` `QQi@=pH I mTT2`
BboHB/"ahU`QQi@=H27i- HQr2`- `QQi@=pHV
BboHB/"ahU`QQi@=`B;?i- `QQi@=pH- mTT2`Vc
Validate Binary Search Tree
5.3.3
5.3.4 Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
ff G22i*Q/2- *QMp2`i aQ`i2/ ``v iQ "BM`v a2`+? h`22
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
h`22LQ/2 bQ`i2/``vhQ"ah Up2+iQ`IBMi= MmKV &
`2im`M bQ`i2/``vhQ"ahUMmKX#2;BMUV- MmKX2M/UVVc
'
i2KTHi2IivT2MK2 _M/QK++2bbAi2`iQ`=
h`22LQ/2 bQ`i2/``vhQ"ah U_M/QK++2bbAi2`iQ` 7B`bi_M/QK++2bbAi2`iQ` HbiV &
+QMbi miQ H2M;i? 4 /BbiM+2U7B`bi- HbiVc
B7 UH2M;i? I4 yV `2im`M MmHHTi`c
ff
ff
miQ KB/ 4 7B`bi Y H2M;i? f kc
h`22LQ/2 `QQi 4 M2r h`22LQ/2 U KB/Vc
`QQi@=H27i 4 bQ`i2/``vhQ"ahU7B`bi- KB/Vc
`QQi@=`B;?i 4 bQ`i2/``vhQ"ahUKB/ Y R- HbiVc
'c
'
`2im`M `QQic
113
5.3
Convert Sorted List to Binary Search Tree
5.3.5
5.3.5 Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced
BST.
RandomAccessIt-
erator
http://leetcode.com/2010/11/convert-sorted-list-to-balanced-
(bottom-up)
binary.html
Convert Sorted Array to Binary Search Tree
O(n log n)
ff G22i*Q/2- *QMp2`i aQ`i2/ GBbi iQ "BM`v a2`+? h`22
ff
*QMp2`i aQ`i2/ ``v iQ "BM`v a2`+? h`22
ff
PUMkV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
h`22LQ/2 bQ`i2/GBbihQ"ah UGBbiLQ/2 ?2/V &
`2im`M bQ`i2/GBbihQ"ah U?2/- HBbiG2M;i? U?2/VVc
'
h`22LQ/2 bQ`i2/GBbihQ"ah UGBbiLQ/2 ?2/- BMi H2MV &
B7 UH2M 44 yV `2im`M MmHHTi`c
B7 UH2M 44 RV `2im`M M2r h`22LQ/2 U?2/@=pHVc
h`22LQ/2 `QQi 4 M2r h`22LQ/2 UMi?nMQ/2 U?2/- H2M f k Y RV@=pHVc
`QQi@=H27i 4 bQ`i2/GBbihQ"ah U?2/- H2M f kVc
`QQi@=`B;?i 4 bQ`i2/GBbihQ"ah UMi?nMQ/2 U?2/- H2M f k Y kVUH2M @ RV f kVc
'
`2im`M `QQic
BMi HBbiG2M;i? UGBbiLQ/2
BMi M 4 yc
r?BH2UMQ/2V &
YYMc
MQ/2 4 MQ/2@=M2tic
MQ/2V &
114
5
'
'
`2im`M Mc
GBbiLQ/2 Mi?nMQ/2 UGBbiLQ/2
r?BH2 U@@MV
MQ/2 4 MQ/2@=M2tic
'c
'
MQ/2- BMi MV &
`2im`M MQ/2c
ff G22i*Q/2- *QMp2`i aQ`i2/ GBbi iQ "BM`v a2`+? h`22
ff #QiiQK@mT
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
h`22LQ/2 bQ`i2/GBbihQ"ahUGBbiLQ/2 ?2/V &
BMi H2M 4 yc
GBbiLQ/2 T 4 ?2/c
r?BH2 UTV &
H2MYYc
T 4 T@=M2tic
'
`2im`M bQ`i2/GBbihQ"ahU?2/- y- H2M @ RVc
'
T`Bpi2,
h`22LQ/2 bQ`i2/GBbihQ"ahUGBbiLQ/2 HBbi- BMi bi`i- BMi 2M/V &
B7 Ubi`i = 2M/V `2im`M MmHHTi`c
'c
'
BMi KB/ 4 bi`i Y U2M/ @ bi`iV f kc
h`22LQ/2 H27i*?BH/ 4 bQ`i2/GBbihQ"ahUHBbi- bi`i- KB/ @ RVc
h`22LQ/2 T`2Mi 4 M2r h`22LQ/2UHBbi@=pHVc
T`2Mi@=H27i 4 H27i*?BH/c
HBbi 4 HBbi@=M2tic
T`2Mi@=`B;?i 4 bQ`i2/GBbihQ"ahUHBbi- KB/ Y R- 2M/Vc
`2im`M T`2Mic
Convert Sorted Array to Binary Search Tree
5.4
5.3.4
115
5.4
10.12.5
DFS
3
3! = 6
`QQi@=`@=H
`@=`QQi@=H- `@=H@=`QQi
5.4.1 Minimum Depth of Binary Tree
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest
leaf node.
ff G22i*Q/2- JBMBKmK .2Ti? Q7 "BM`v h`22
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KBM.2Ti?U+QMbi h`22LQ/2 `QQiV &
`2im`M KBM.2Ti?U`QQi- 7Hb2Vc
'
T`Bpi2,
biiB+ BMi KBM.2Ti?U+QMbi h`22LQ/2 `QQi- #QQH ?b#`Qi?2`V &
B7 U5`QQiV `2im`M ?b#`Qi?2` \ ALhnJs , yc
'c
'
`2im`M R Y KBMUKBM.2Ti?U`QQi@=H27i- `QQi@=`B;?i 54 LlGGVKBM.2Ti?U`QQi@=`B;?i- `QQi@=H27i 54 LlGGVVc
ff G22i*Q/2- JBMBKmK .2Ti? Q7 "BM`v h`22
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KBM.2Ti?Uh`22LQ/2 `QQiV &
B7 U`QQi 44 MmHHTi`V
`2im`M yc
BMi `2bmHi 4 ALhnJsc
bi+FITB`Ih`22LQ/2 - BMi== bc
116
5
bXTmb?UKF2nTB`U`QQi- RVVc
r?BH2 U5bX2KTivUVV &
miQ MQ/2 4 bXiQTUVX7B`bic
miQ /2Ti? 4 bXiQTUVXb2+QM/c
bXTQTUVc
B7 UMQ/2@=H27i 44 MmHHTi` MQ/2@=`B;?i 44 MmHHTi`V
`2bmHi 4 KBMU`2bmHi- /2Ti?Vc
B7 UMQ/2@=H27i `2bmHi = /2Ti?V ff
bXTmb?UKF2nTB`UMQ/2@=H27i- /2Ti? Y RVVc
'
'c
'
B7 UMQ/2@=`B;?i `2bmHi = /2Ti?V ff
bXTmb?UKF2nTB`UMQ/2@=`B;?i- /2Ti? Y RVVc
`2im`M `2bmHic
Maximum Depth of Binary Tree
5.4.2
5.4.2 Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the
farthest leaf node.
ff G22i*Q/2- JtBKmK .2Ti? Q7 "BM`v h`22
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
BMi Kt.2Ti?Uh`22LQ/2 `QQiV &
B7 U`QQi 44 MmHHTi`V `2im`M yc
'c
'
`2im`M KtUKt.2Ti?U`QQi@=H27iV- Kt.2Ti?U`QQi@=`B;?iVV Y Rc
117
5.4
Minimum Depth of Binary Tree
5.4.1
5.4.3 Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the
values along the path equals the given sum.
For example: Given the below binary tree and bmK 4 kk,
8
f $
9
3
f
f $
RR Rj 9
f $
$
d
k
R
return true, as there exist a root-to-leaf path 8@=9@=RR@=k which sum is 22.
i`m2
7Hb2
return
ff G22i*Q/2- Si? amK
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH ?bSi?amKUh`22LQ/2 `QQi- BMi bmKV &
B7 U`QQi 44 MmHHTi`V `2im`M 7Hb2c
B7 U`QQi@=H27i 44 MmHHTi` `QQi@=`B;?i 44 MmHHTi`V ff H27
`2im`M bmK 44 `QQi@=pHc
'c
'
`2im`M ?bSi?amKU`QQi@=H27i- bmK @ `QQi@=pHV
%% ?bSi?amKU`QQi@=`B;?i- bmK @ `QQi@=pHVc
Path Sum II
5.4.4
118
5.4.4 Path Sum II
Given a binary tree and a sum, find all root-to-leaf paths where each paths sum equals the given sum.
For example: Given the below binary tree and bmK 4 kk,
8
f $
9
3
f
f $
RR Rj 9
f $
f $
d
k 8
R
return
(
)
(8-9-RR-k)(8-3-9-8)
ff G22i*Q/2- Si? amK AA
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = Ti?amKUh`22LQ/2 `QQi- BMi bmKV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
p2+iQ`IBMi= +m`c ff
Ti?amKU`QQi- bmK- +m`- `2bmHiVc
`2im`M `2bmHic
'
T`Bpi2,
pQB/ Ti?amKUh`22LQ/2 `QQi- BMi ;T- p2+iQ`IBMi= +m`p2+iQ`Ip2+iQ`IBMi= = `2bmHiV &
B7 U`QQi 44 MmHHTi`V `2im`Mc
+m`XTmb?n#+FU`QQi@=pHVc
B7 U`QQi@=H27i 44 MmHHTi` `QQi@=`B;?i 44 MmHHTi`V & ff H27
B7 U;T 44 `QQi@=pHV
`2bmHiXTmb?n#+FU+m`Vc
'
Ti?amKU`QQi@=H27i- ;T @ `QQi@=pH- +m`- `2bmHiVc
Ti?amKU`QQi@=`B;?i- ;T @ `QQi@=pH- +m`- `2bmHiVc
return
119
5.4
'
'c
+m`XTQTn#+FUVc
Path Sum
5.4.3
5.4.5 Binary Tree Maximum Path Sum
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree. For example: Given the below binary tree,
R
f $
k
j
Return 6.
13.2
Array
Binary Tree
Array
Binary Tree
dfs
L
L
R
ff G22i*Q/2- "BM`v h`22 JtBKmK Si? amK
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KtSi?amKUh`22LQ/2 `QQiV &
KtnbmK 4 ALhnJALc
/7bU`QQiVc
`2im`M KtnbmKc
'
T`Bpi2,
BMi KtnbmKc
BMi /7bU+QMbi h`22LQ/2 `QQiV &
B7 U`QQi 44 MmHHTi`V `2im`M yc
BMi H 4 /7bU`QQi@=H27iVc
BMi ` 4 /7bU`QQi@=`B;?iVc
Binary Tree
L
0
R
120
'c
BMi bmK 4 `QQi@=pHc
B7 UH = yV bmK Y4 Hc
B7 U` = yV bmK Y4 `c
KtnbmK 4 KtUKtnbmK- bmKVc
`2im`M KtU`- HV = y \ KtU`- HV Y `QQi@=pH , `QQi@=pHc
'
return
L->root->R
L->root
R->root
Maximum Subarray
13.2
5.4.6 Populating Next Right Pointers in Each Node
Given a binary tree
bi`m+i h`22GBMFLQ/2 &
BMi pHc
h`22GBMFLQ/2 H27i- `B;?i- M2tic
h`22GBMFLQ/2UBMi tV , pHUtV- H27iULlGGV- `B;?iULlGGV- M2tiULlGGV &'
'c
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer
should be set to LlGG.
Initially, all next pointers are set to LlGG.
Note:
You may only use constant extra space.
You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent
has two children).
For example, Given the following perfect binary tree,
R
$
k
j
f $ f $
9 8 e d
f
After calling your function, the tree should look like:
R @= LlGG
f $
k @= j @= LlGG
f $ f $
9@=8@=e@=d @= LlGG
121
5.4
ff G22i*Q/2- SQTmHiBM; L2ti _B;?i SQBMi2`b BM 1+? LQ/2
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ +QMM2+iUh`22GBMFLQ/2 `QQiV &
+QMM2+iU`QQi- LlGGVc
'
T`Bpi2,
pQB/ +QMM2+iUh`22GBMFLQ/2 `QQi- h`22GBMFLQ/2 bB#HBM;V &
B7 U`QQi 44 MmHHTi`V
`2im`Mc
2Hb2
`QQi@=M2ti 4 bB#HBM;c
'c
'
+QMM2+iU`QQi@=H27i- `QQi@=`B;?iVc
B7 UbB#HBM;V
+QMM2+iU`QQi@=`B;?i- bB#HBM;@=H27iVc
2Hb2
+QMM2+iU`QQi@=`B;?i- MmHHTi`Vc
Populating Next Right Pointers in Each Node II
5.1.12
5.4.7 Sum Root to Leaf Numbers
Given a binary tree containing digits from y@N only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path R@=k@=j which represents the number Rkj.
Find the total sum of all root-to-leaf numbers.
For example,
R
f $
k
j
The root-to-leaf path R@=k represents the number Rk. The root-to-leaf path R@=j represents the number
Rj.
Return the sum = Rk Y Rj 4 k8.
122
ff G22i*Q/2- .2+Q/2 qvb
ff
PUMV
PUHQ;MV
+Hbb aQHmiBQM &
Tm#HB+,
BMi bmKLmK#2`bUh`22LQ/2 `QQiV &
`2im`M /7bU`QQi- yVc
'
T`Bpi2,
BMi /7bUh`22LQ/2 `QQi- BMi bmKV &
B7 U`QQi 44 MmHHTi`V `2im`M yc
B7 U`QQi@=H27i 44 MmHHTi` `QQi@=`B;?i 44 MmHHTi`V
`2im`M bmK
Ry Y `QQi@=pHc
'c
'
`2im`M /7bU`QQi@=H27i- bmK
Ry Y `QQi@=pHV Y
/7bU`QQi@=`B;?i- bmK
Ry Y `QQi@=pHVc
6.1 Merge Sorted Array
Given two sorted integer arrays A and B, merge B into A as one sorted array.
Note: You may assume that A has enough space to hold additional elements from B. The number of
elements initialized in A and B are m and n respectively.
ffG22i*Q/2- J2`;2 aQ`i2/ ``v
ff
PUKYMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ K2`;2Up2+iQ`IBMi= - BMi K- p2+iQ`IBMi= "- BMi MV &
BMi B 4 K @ R- B# 4 M @ R- B+m` 4 K Y M @ Rc
r?BH2UB =4 y B# =4 yV &
(B+m`@@) 4 (B) =4 "(B#) \ (B@@) , "(B#@@)c
'
r?BH2UB# =4 yV &
(B+m`@@) 4 "(B#@@)c
'
'
'c
Merge Two Sorted Lists
Merge k Sorted Lists
6.2
6.3
123
124
6.2 Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together
the nodes of the first two lists.
ffG22i*Q/2- J2`;2 hrQ aQ`i2/ GBbib
ff
PUKBMUK-MVV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 K2`;2hrQGBbibUGBbiLQ/2 HR- GBbiLQ/2 HkV &
B7 UHR 44 MmHHTi`V `2im`M Hkc
B7 UHk 44 MmHHTi`V `2im`M HRc
GBbiLQ/2 /mKKvU@RVc
GBbiLQ/2 T 4 /mKKvc
7Q` Uc HR 54 MmHHTi` Hk 54 MmHHTi`c T 4 T@=M2tiV &
B7 UHR@=pH = Hk@=pHV & T@=M2ti 4 Hkc Hk 4 Hk@=M2tic '
2Hb2 & T@=M2ti 4 HRc HR 4 HR@=M2tic '
'
T@=M2ti 4 HR 54 MmHHTi` \ HR , Hkc
`2im`M /mKKvXM2tic
'
'c
Merge Sorted Array 6.1
Merge k Sorted Lists
6.3
6.3 Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Merge Two Sorted Lists
6.2
125
6.4 Insertion Sort List
ffG22i*Q/2- J2`;2 F aQ`i2/ GBbib
ff
PUMRYMkYXXXV
PURV
ff hP.P,
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 K2`;2EGBbibUp2+iQ`IGBbiLQ/2 = HBbibV &
B7 UHBbibXbBx2UV 44 yV `2im`M MmHHTi`c
'
'c
GBbiLQ/2 T 4 HBbib(y)c
7Q` UBMi B 4 Rc B I HBbibXbBx2UVc BYYV &
T 4 K2`;2hrQGBbibUT- HBbib(B)Vc
'
`2im`M Tc
ff J2`;2 hrQ aQ`i2/ GBbib
GBbiLQ/2 K2`;2hrQGBbibUGBbiLQ/2 HR- GBbiLQ/2 HkV &
GBbiLQ/2 ?2/U@RVc
7Q` UGBbiLQ/2 T 4 ?2/c HR 54 MmHHTi` %% Hk 54 MmHHTi`c T 4 T@=M2tiV &
BMi pHR 4 HR 44 MmHHTi` \ ALhnJs , HR@=pHc
BMi pHk 4 Hk 44 MmHHTi` \ ALhnJs , Hk@=pHc
B7 UpHR I4 pHkV &
T@=M2ti 4 HRc
HR 4 HR@=M2tic
' 2Hb2 &
T@=M2ti 4 Hkc
Hk 4 Hk@=M2tic
'
'
`2im`M ?2/XM2tic
'
Merge Sorted Array 6.1
Merge Two Sorted Lists
6.2
6.4 Insertion Sort List
Sort a linked list using insertion sort.
126
ff G22i*Q/2- AMb2`iBQM aQ`i GBbi
ff
PUMkV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
GBbiLQ/2 BMb2`iBQMaQ`iGBbiUGBbiLQ/2
GBbiLQ/2 /mKKvUALhnJALVc
ff/mKKvXM2ti 4 ?2/c
'
'c
?2/V &
7Q` UGBbiLQ/2 +m` 4 ?2/c +m` 54 MmHHTi`cV &
miQ TQb 4 7BM/AMb2`iSQbU/mKKv- +m`@=pHVc
GBbiLQ/2 iKT 4 +m`@=M2tic
+m`@=M2ti 4 TQb@=M2tic
TQb@=M2ti 4 +m`c
+m` 4 iKTc
'
`2im`M /mKKvXM2tic
GBbiLQ/2 7BM/AMb2`iSQbUGBbiLQ/2 ?2/- BMi tV &
GBbiLQ/2 T`2 4 MmHHTi`c
7Q` UGBbiLQ/2 +m` 4 ?2/c +m` 54 MmHHTi` +m`@=pH I4 tc
T`2 4 +m`- +m` 4 +m`@=M2tiV
c
`2im`M T`2c
'
Sort List,
6.5
6.5 Sort List
Sort a linked list in O(nlogn) time using constant space complexity.
O(nlogn)
Two Sorted Lists
ff G22i*Q/2- aQ`i GBbi
ff
PUMHQ;MV
+Hbb aQHmiBQM &
PURV
Merge
127
6.6 First Missing Positive
Tm#HB+,
GBbiLQ/2 bQ`iGBbiUGBbiLQ/2 ?2/V &
B7 U?2/ 44 LlGG %% ?2/@=M2ti 44 LlGGV`2im`M ?2/c
ff
GBbiLQ/2 7bi 4 ?2/- bHQr 4 ?2/c
r?BH2 U7bi@=M2ti 54 LlGG 7bi@=M2ti@=M2ti 54 LlGGV &
7bi 4 7bi@=M2ti@=M2tic
bHQr 4 bHQr@=M2tic
'
ff
7bi 4 bHQrc
bHQr 4 bHQr@=M2tic
7bi@=M2ti 4 LlGGc
'
'c
GBbiLQ/2 HR 4 bQ`iGBbiU?2/Vc
GBbiLQ/2 Hk 4 bQ`iGBbiUbHQrVc
`2im`M K2`;2hrQGBbibUHR- HkVc
ff
ff
ff J2`;2 hrQ aQ`i2/ GBbib
GBbiLQ/2 K2`;2hrQGBbibUGBbiLQ/2 HR- GBbiLQ/2 HkV &
GBbiLQ/2 /mKKvU@RVc
7Q` UGBbiLQ/2 T 4 /mKKvc HR 54 MmHHTi` %% Hk 54 MmHHTi`c T 4 T@=M2tiV &
BMi pHR 4 HR 44 MmHHTi` \ ALhnJs , HR@=pHc
BMi pHk 4 Hk 44 MmHHTi` \ ALhnJs , Hk@=pHc
B7 UpHR I4 pHkV &
T@=M2ti 4 HRc
HR 4 HR@=M2tic
' 2Hb2 &
T@=M2ti 4 Hkc
Hk 4 Hk@=M2tic
'
'
`2im`M /mKKvXM2tic
'
Insertion Sort List
6.4
6.6 First Missing Positive
Given an unsorted integer array, find the first missing positive integer.
For example, Given (R-k-y) return j, and (j-9-@R-R) return k.
Your algorithm should run in O(n) time and uses constant space.
128
(bucket sort)
(B)54 BYR
A[i]
A[A[i]-1]
(B)44 ((B)@R)
ff G22i*Q/2- 6B`bi JBbbBM; SQbBiBp2
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi 7B`biJBbbBM;SQbBiBp2Up2+iQ`IBMi= MmKbV &
#m+F2inbQ`iUMmKbVc
7Q` UBMi B 4 yc B I MmKbXbBx2UVc YYBV
B7 UMmKb(B) 54 UB Y RVV
`2im`M B Y Rc
`2im`M MmKbXbBx2UV Y Rc
'
T`Bpi2,
biiB+ pQB/ #m+F2inbQ`iUp2+iQ`IBMi= V &
+QMbi BMi M 4 XbBx2UVc
7Q` UBMi B 4 yc B I Mc BYYV &
r?BH2 U(B) 54 B Y RV &
B7 U(B) I4 y %% (B) = M %% (B) 44 ((B) @ R)V
#`2Fc
brTU(B)- ((B) @ R)Vc
'
'
'
'c
Sort Colors,
6.7
6.7 Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are
adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
Note: You are not suppose to use the librarys sort function for this problem.
Follow up:
A rather straight forward solution is a two-pass algorithm using counting sort.
129
6.7 Sort Colors
First, iterate the array counting number of 0s, 1s, and 2s, then overwrite array with total number of 0s,
then 1s and followed by 2s.
Could you come up with an one-pass algorithm using only constant space?
0, 1, 2
(counting sort)
index
O(n)
red
index
index
O(1)
partition
1
ff G22i*Q/2- aQ`i *QHQ`b
ff *QmMiBM; aQ`i
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ bQ`i*QHQ`bUp2+iQ`IBMi= V &
BMi +QmMib(j) 4 & y 'c ff
7Q` UBMi B 4 yc B I XbBx2UVc BYYV
+QmMib((B))YYc
7Q` UBMi B 4 y- BM/2t 4 yc B I jc BYYV
7Q` UBMi D 4 yc D I +QmMib(B)c DYYV
(BM/2tYY) 4 Bc
'c
blue
'
2
ff G22i*Q/2- aQ`i *QHQ`b
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ bQ`i*QHQ`bUp2+iQ`IBMi= V &
ff
`2/
BM/2t
#Hm2
BMi `2/ 4 y- #Hm2 4 XbBx2UV @ Rc
7Q` UBMi B 4 yc B I #Hm2 Y RcV &
B7 U(B) 44 yV
brTU(BYY)- (`2/YY)Vc
2Hb2 B7 U(B) 44 kV
brTU(B)- (#Hm2@@)Vc
2Hb2
BM/2t
130
'c
'
'
BYYc
3
ff G22i*Q/2- aQ`i *QHQ`b
ff mb2 T`iBiBQMUV
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ bQ`i*QHQ`bUp2+iQ`IBMi= MmKbV &
T`iBiBQMUT`iBiBQMUMmKbX#2;BMUV- MmKbX2M/UV- #BM/RbiU2[mHniQIBMi=UV- yVVMmKbX2M/UV- #BM/RbiU2[mHniQIBMi=UV- RVVc
'
'c
4
ff G22i*Q/2- aQ`i *QHQ`b
ff
T`iBiBQMUV
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ bQ`i*QHQ`bUp2+iQ`IBMi= MmKbV &
T`iBiBQMUT`iBiBQMUMmKbX#2;BMUV- MmKbX2M/UV- #BM/RbiU2[mHniQIBMi=UV- yVVMmKbX2M/UV- #BM/RbiU2[mHniQIBMi=UV- RVVc
'
T`Bpi2,
i2KTHi2IivT2MK2 6Q`r`/Ai2`iQ`- ivT2MK2 lM`vS`2/B+i2=
6Q`r`/Ai2`iQ` T`iBiBQMU6Q`r`/Ai2`iQ` 7B`bi- 6Q`r`/Ai2`iQ` HbilM`vS`2/B+i2 T`2/V &
miQ TQb 4 7B`bic
7Q` Uc 7B`bi 54 Hbic YY7B`biV
B7 UT`2/U 7B`biVV
brTU 7B`bi- TQbYYVc
'c
'
`2im`M TQbc
First Missing Positive,
6.6
7.1 Search for a Range
Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithms runtime complexity must be in the order of O(log n).
If the target is not found in the array, return (@R- @R).
For example, Given (8- d- d- 3- 3- Ry) and target value 8, return (j- 9).
STL
ff G22i*Q/2- a2`+? 7Q` _M;2
ff
ahG
ff
PUHQ;MV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= b2`+?_M;2Up2+iQ`IBMi= MmKb- BMi i`;2iV &
+QMbi BMi H 4 /BbiM+2UMmKbX#2;BMUV- HQr2`n#QmM/UMmKbX#2;BMUV- MmKbX2M/UV- i`;2iVVc
+QMbi BMi m 4 /BbiM+2UMmKbX#2;BMUV- T`2pUmTT2`n#QmM/UMmKbX#2;BMUV- MmKbX2M/UV- i`;2i
B7 UMmKb(H) 54 i`;2iV ff MQi 7QmM/
`2im`M p2+iQ`IBMi= & @R- @R 'c
2Hb2
`2im`M p2+iQ`IBMi= & H- m 'c
'
'c
lower_bound
upper_bound
ff G22i*Q/2- a2`+? 7Q` _M;2
ff
HQr2`n#QmM/
mTT2`n#QmM/
ff
PUHQ;MV
PURV
+Hbb aQHmiBQM &
131
132
Tm#HB+,
p2+iQ`IBMi= b2`+?_M;2 Up2+iQ`IBMi= MmKb- BMi i`;2iV &
miQ HQr2` 4 HQr2`n#QmM/UMmKbX#2;BMUV- MmKbX2M/UV- i`;2iVc
miQ mTTT2` 4 mTT2`n#QmM/UHQr2`- MmKbX2M/UV- i`;2iVc
'
B7 UHQr2` 44 MmKbX2M/UV %% HQr2` 54 i`;2iV
`2im`M p2+iQ`IBMi= & @R- @R 'c
2Hb2
`2im`M p2+iQ`IBMi= &/BbiM+2UMmKbX#2;BMUV- HQr2`V- /BbiM+2UMmKbX#2;BMUV- T`2pUmTT
i2KTHi2IivT2MK2 6Q`r`/Ai2`iQ`- ivT2MK2 h=
6Q`r`/Ai2`iQ` HQr2`n#QmM/ U6Q`r`/Ai2`iQ` 7B`bi6Q`r`/Ai2`iQ` Hbi- h pHm2V &
r?BH2 U7B`bi 54 HbiV &
miQ KB/ 4 M2tiU7B`bi- /BbiM+2U7B`bi- HbiV f kVc
'
'
B7 UpHm2 =
2Hb2
KB/V
7B`bi 4 YYKB/c
Hbi 4 KB/c
`2im`M 7B`bic
i2KTHi2IivT2MK2 6Q`r`/Ai2`iQ`- ivT2MK2 h=
6Q`r`/Ai2`iQ` mTT2`n#QmM/ U6Q`r`/Ai2`iQ` 7B`bi6Q`r`/Ai2`iQ` Hbi- h pHm2V &
r?BH2 U7B`bi 54 HbiV &
miQ KB/ 4 M2tiU7B`bi- /BbiM+2 U7B`bi- HbiV f kVc
'
'c
'
B7 UpHm2 =4
2Hb2
KB/V
7B`bi 4 YYKB/c
Hbi 4 KB/c
ff
HQr2`n#QmM/
`2im`M 7B`bic
Search Insert Position,
7.2
7.2 Search Insert Position
Given a sorted array and a target value, return the index if the target is found. If not, return the index
where it would be if it were inserted in order.
You may assume no duplicates in the array.
133
7.3 Search a 2D Matrix
Here are few examples.
(R-j-8-e)- 8 k
(R-j-8-e)- k R
(R-j-8-e)- d 9
(R-j-8-e)- y y
bi/,,HQr2`n#QmM/UV
ff G22i*Q/2- a2`+? AMb2`i SQbBiBQM
ff
HQr2`n#QmM/
ff
PUHQ;MV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi b2`+?AMb2`iUp2+iQ`IBMi= MmKb- BMi i`;2iV &
`2im`M /BbiM+2UMmKbX#2;BMUV- HQr2`n#QmM/UMmKbX#2;BMUV- MmKbX2M/UV- i`;2iVVc
'
i2KTHi2IivT2MK2 6Q`r`/Ai2`iQ`- ivT2MK2 h=
6Q`r`/Ai2`iQ` HQr2`n#QmM/ U6Q`r`/Ai2`iQ` 7B`bi6Q`r`/Ai2`iQ` Hbi- h pHm2V &
r?BH2 U7B`bi 54 HbiV &
miQ KB/ 4 M2tiU7B`bi- /BbiM+2U7B`bi- HbiV f kVc
'
'c
'
B7 UpHm2 =
2Hb2
KB/V
7B`bi 4 YYKB/c
Hbi 4 KB/c
`2im`M 7B`bic
Search for a Range,
7.1
7.3 Search a 2D Matrix
Write an efficient algorithm that searches for a value in an m n matrix. This matrix has the following
properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
134
7
For example, Consider the following matrix:
(Rj- 8- d)(Ry- RR- Re- ky)(kj- jy- j9- 8y)
Given i`;2i 4 j, return true.
ff G22i*Q/2- a2`+? k. Ji`Bt
ff
PUHQ;MV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH b2`+?Ji`BtU+QMbi p2+iQ`Ip2+iQ`IBMi== Ki`Bt- BMi i`;2iV &
B7 UKi`BtX2KTivUVV `2im`M 7Hb2c
+QMbi bBx2ni K 4 Ki`BtXbBx2UVc
+QMbi bBx2ni M 4 Ki`BtX7`QMiUVXbBx2UVc
BMi 7B`bi 4 yc
BMi Hbi 4 K
Mc
r?BH2 U7B`bi I HbiV &
BMi KB/ 4 7B`bi Y UHbi @ 7B`biV f kc
BMi pHm2 4 Ki`Bt(KB/ f M)(KB/ W M)c
'
'c
'
B7 UpHm2 44 i`;2iV
`2im`M i`m2c
2Hb2 B7 UpHm2 I i`;2iV
7B`bi 4 KB/ Y Rc
2Hb2
Hbi 4 KB/c
`2im`M 7Hb2c
8.1 Subsets
Given a set of distinct integers, S, return all possible subsets.
Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example, If a 4 (R-k-j), a solution is:
(
(j)(R)(k)(R-k-j)(R-j)(k-j)(R-k)()
8.1.1
ff G22i*Q/2- am#b2ib
ff
PUkMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = bm#b2ibUp2+iQ`IBMi= aV &
bQ`iUaX#2;BMUV- aX2M/UVVc ff
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
p2+iQ`IBMi= Ti?c
bm#b2ibUa- Ti?- y- `2bmHiVc
`2im`M `2bmHic
135
136
8
'
T`Bpi2,
biiB+ pQB/ bm#b2ibU+QMbi p2+iQ`IBMi= a- p2+iQ`IBMi= Ti?- BMi bi2Tp2+iQ`Ip2+iQ`IBMi= = `2bmHiV &
B7 Ubi2T 44 aXbBx2UVV &
`2bmHiXTmb?n#+FUTi?Vc
`2im`Mc
'
ff
a(bi2T)
bm#b2ibUa- Ti?- bi2T Y R- `2bmHiVc
ff
a(bi2T)
Ti?XTmb?n#+FUa(bi2T)Vc
bm#b2ibUa- Ti?- bi2T Y R- `2bmHiVc
Ti?XTQTn#+FUVc
'
'c
#QQH b2H2+i2/(M)
ff G22i*Q/2- am#b2ib
ff
PUkMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = bm#b2ibUp2+iQ`IBMi= aV &
bQ`iUaX#2;BMUV- aX2M/UVVc ff
'
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
p2+iQ`I#QQH= b2H2+i2/UaXbBx2UV- 7Hb2Vc
bm#b2ibUa- b2H2+i2/- y- `2bmHiVc
`2im`M `2bmHic
T`Bpi2,
biiB+ pQB/ bm#b2ibU+QMbi p2+iQ`IBMi= a- p2+iQ`I#QQH= b2H2+i2/- BMi bi2Tp2+iQ`Ip2+iQ`IBMi= = `2bmHiV &
B7 Ubi2T 44 aXbBx2UVV &
p2+iQ`IBMi= bm#b2ic
7Q` UBMi B 4 yc B I aXbBx2UVc BYYV &
B7 Ub2H2+i2/(B)V bm#b2iXTmb?n#+FUa(B)Vc
'
`2bmHiXTmb?n#+FUbm#b2iVc
`2im`Mc
'
ff
a(bi2T)
b2H2+i2/(bi2T) 4 7Hb2c
bm#b2ibUa- b2H2+i2/- bi2T Y R- `2bmHiVc
ff
a(bi2T)
b2H2+i2/(bi2T) 4 i`m2c
bm#b2ibUa- b2H2+i2/- bi2T Y R- `2bmHiVc
137
8.1 Subsets
'
'c
8.1.2
ff G22i*Q/2- am#b2ib
ff
PUkMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = bm#b2ibUp2+iQ`IBMi= aV &
bQ`iUaX#2;BMUV- aX2M/UVVc ff
p2+iQ`Ip2+iQ`IBMi= = `2bmHiURVc
7Q` UmiQ 2H2K , aV &
`2bmHiX`2b2`p2U`2bmHiXbBx2UV
kVc
miQ ?H7 4 `2bmHiX#2;BMUV Y `2bmHiXbBx2UVc
+QTvU`2bmHiX#2;BMUV- ?H7- #+FnBMb2`i2`U`2bmHiVVc
7Q`n2+?U?H7- `2bmHiX2M/UV- (2H2K)U/2+HivT2U`2bmHi(y)V 2V&
2XTmb?n#+FU2H2KVc
'Vc
'
`2im`M `2bmHic
'
'c
int
S[i]
a4&-"-*-.'
0
B1
B2
int
yRRy4e
B1 B2 , B1 B2 , B1 B2
ff G22i*Q/2- am#b2ib
ff
PUkMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = bm#b2ibUp2+iQ`IBMi= aV &
bQ`iUaX#2;BMUV- aX2M/UVVc ff
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
+QMbi bBx2ni M 4 aXbBx2UVc
p2+iQ`IBMi= pc
7Q` UbBx2ni B 4 yc B I R II Mc BYYV &
7Q` UbBx2ni D 4 yc D I Mc DYYV &
B7 UB R II DV pXTmb?n#+FUa(D)Vc
'
`2bmHiXTmb?n#+FUpVc
pX+H2`UVc
i
&"-*'
138
'
'c
'
`2im`M `2bmHic
Subsets II
8.2
8.2 Subsets II
Given a collection of integers that might contain duplicates, S, return all possible subsets.
Note:
Elements in a subset must be in non-descending order. The solution set must not contain duplicate
subsets. For example, If a 4 (R-k-k), a solution is:
(
(k)(R)(R-k-k)(k-k)(R-k)()
8.2.1
ff G22i*Q/2- am#b2ib AA
ff
R
PUkMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = bm#b2ibqBi?.mTUp2+iQ`IBMi= aV &
bQ`iUaX#2;BMUV- aX2M/UVVc ff
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
p2+iQ`IBMi= Ti?c
/7bUa- aX#2;BMUV- Ti?- `2bmHiVc
8.2 Subsets II
'
`2im`M `2bmHic
T`Bpi2,
biiB+ pQB/ /7bU+QMbi p2+iQ`IBMi= a- p2+iQ`IBMi=,,Bi2`iQ` bi`ip2+iQ`IBMi= Ti?- p2+iQ`Ip2+iQ`IBMi= = `2bmHiV &
`2bmHiXTmb?n#+FUTi?Vc
'c
'
7Q` UmiQ B 4 bi`ic B I aX2M/UVc BYYV &
B7 UB 54 bi`i B 44 UB@RVV +QMiBMm2c
Ti?XTmb?n#+FU BVc
/7bUa- B Y R- Ti?- `2bmHiVc
Ti?XTQTn#+FUVc
'
ff G22i*Q/2- am#b2ib AA
ff
k
PUkMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = bm#b2ibqBi?.mTUp2+iQ`IBMi= aV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
bQ`iUaX#2;BMUV- aX2M/UVVc ff
mMQ`/2`2/nKTIBMi- BMi= +QmMinKTc ff
7Q`n2+?UaX#2;BMUV- aX2M/UV- (+QmMinKT)UBMi 2V &
B7 U+QmMinKTX7BM/U2V 54 +QmMinKTX2M/UVV
+QmMinKT(2)YYc
2Hb2
+QmMinKT(2) 4 Rc
'Vc
ff
KT
TB`
p2+iQ`
p2+iQ`ITB`IBMi- BMi= = 2H2Kbc
7Q`n2+?U+QmMinKTX#2;BMUV- +QmMinKTX2M/UV(2H2Kb)U+QMbi TB`IBMi- BMi= 2V &
2H2KbXTmb?n#+FU2Vc
'Vc
bQ`iU2H2KbX#2;BMUV- 2H2KbX2M/UVVc
p2+iQ`IBMi= Ti?c ff
'
bm#b2ibU2H2Kb- y- Ti?- `2bmHiVc
`2im`M `2bmHic
T`Bpi2,
biiB+ pQB/ bm#b2ibU+QMbi p2+iQ`ITB`IBMi- BMi= = 2H2KbbBx2ni bi2T- p2+iQ`IBMi= Ti?- p2+iQ`Ip2+iQ`IBMi= = `2bmHiV &
B7 Ubi2T 44 2H2KbXbBx2UVV &
`2bmHiXTmb?n#+FUTi?Vc
`2im`Mc
'
139
140
'c
'
7Q` UBMi B 4 yc B I4 2H2Kb(bi2T)Xb2+QM/c BYYV &
7Q` UBMi D 4 yc D I Bc YYDV &
Ti?XTmb?n#+FU2H2Kb(bi2T)X7B`biVc
'
bm#b2ibU2H2Kb- bi2T Y R- Ti?- `2bmHiVc
7Q` UBMi D 4 yc D I Bc YYDV &
Ti?XTQTn#+FUVc
'
'
ff G22i*Q/2- am#b2ib AA
ff
PUkMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = bm#b2ibqBi?.mTUp2+iQ`IBMi= aV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic ff
bQ`iUaX#2;BMUV- aX2M/UVVc
p2+iQ`IBMi= +QmMiUaX#+FUV @ aX7`QMiUV Y R- yVc
ff
7Q` UmiQ B , aV &
+QmMi(B @ a(y))YYc
'
ff
p2+iQ`IBMi= b2H2+i2/UaX#+FUV @ aX7`QMiUV Y R- @RVc
'
bm#b2ibUa- +QmMi- b2H2+i2/- y- `2bmHiVc
`2im`M `2bmHic
T`Bpi2,
biiB+ pQB/ bm#b2ibU+QMbi p2+iQ`IBMi= a- p2+iQ`IBMi= +QmMip2+iQ`IBMi= b2H2+i2/- bBx2ni bi2T- p2+iQ`Ip2+iQ`IBMi= = `2bmHiV &
B7 Ubi2T 44 +QmMiXbBx2UVV &
p2+iQ`IBMi= bm#b2ic
7Q`UbBx2ni B 4 yc B I b2H2+i2/XbBx2UVc BYYV &
7Q` UBMi D 4 yc D I b2H2+i2/(B)c DYYV &
bm#b2iXTmb?n#+FUBYa(y)Vc
'
'
`2bmHiXTmb?n#+FUbm#b2iVc
`2im`Mc
'
'
7Q` UBMi B 4 yc B I4 +QmMi(bi2T)c BYYV &
b2H2+i2/(bi2T) 4 Bc
bm#b2ibUa- +QmMi- b2H2+i2/- bi2T Y R- `2bmHiVc
'
8.2 Subsets II
'c
8.2.2
ff G22i*Q/2- am#b2ib AA
ff
ff
PUkMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = bm#b2ibqBi?.mTUp2+iQ`IBMi= aV &
bQ`iUaX#2;BMUV- aX2M/UVVc ff
p2+iQ`Ip2+iQ`IBMi= = `2bmHiURVc
'c
'
bBx2ni T`2pBQmbnbBx2 4 yc
7Q` UbBx2ni B 4 yc B I aXbBx2UVc YYBV &
+QMbi bBx2ni bBx2 4 `2bmHiXbBx2UVc
7Q` UbBx2ni D 4 yc D I bBx2c YYDV &
B7 UB 44 y %% a(B) 54 a(B@R) %% D =4 T`2pBQmbnbBx2V &
`2bmHiXTmb?n#+FU`2bmHi(D)Vc
`2bmHiX#+FUVXTmb?n#+FUa(B)Vc
'
'
T`2pBQmbnbBx2 4 bBx2c
'
`2im`M `2bmHic
ff G22i*Q/2- am#b2ib AA
ff
PUkMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = bm#b2ibqBi?.mTUp2+iQ`IBMi= aV &
bQ`iUaX#2;BMUV- aX2M/UVVc ff
ff
b2i
mMQ`/2`2/nb2i
b2iIp2+iQ`IBMi= = `2bmHic
+QMbi bBx2ni M 4 aXbBx2UVc
p2+iQ`IBMi= pc
7Q` UbBx2ni B 4 yc B I Rl II Mc YYBV &
7Q` UbBx2ni D 4 yc D I Mc YYDV &
B7 UB R II DV
pXTmb?n#+FUa(D)Vc
'
`2bmHiXBMb2`iUpVc
pX+H2`UVc
'
p2+iQ`Ip2+iQ`IBMi= = `2Hn`2bmHic
141
142
'
'c
+QTvU`2bmHiX#2;BMUV- `2bmHiX2M/UV- #+FnBMb2`i2`U`2Hn`2bmHiVVc
`2im`M `2Hn`2bmHic
Subsets
8.1
8.3 Permutations
Given a collection of numbers, return all possible permutations.
For example, (R-k-j) have the following permutations: (R-k-j)- (R-j-k)- (k-R-j)- (k-j-R)(j-R-k), and (j-k-R).
8.3.1 next_permutation()
bi/,,M2tinT2`KmiiBQMUV
OJ
ff G22i*Q/2- S2`KmiiBQMb
ff
PUM5V
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = T2`Kmi2Up2+iQ`IBMi= MmKV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
bQ`iUMmKX#2;BMUV- MmKX2M/UVVc
/Q &
'c
'
`2bmHiXTmb?n#+FUMmKVc
' r?BH2UM2tinT2`KmiiBQMUMmKX#2;BMUV- MmKX2M/UVVVc
`2im`M `2bmHic
8.3.2
next_permutation()
2.1.12
API
143
8.3 Permutations
ff G22i*Q/2- S2`KmiiBQMb
ff
M2tinT2`KmiiBQMUV
ff
PUM5V
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = T2`Kmi2Up2+iQ`IBMi= MmKV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
bQ`iUMmKX#2;BMUV- MmKX2M/UVVc
/Q &
'c
'
`2bmHiXTmb?n#+FUMmKVc
ff
kXRXRk
M2tinT2`KmiiBQMUV
ff
bi/,,M2tinT2`KmiiBQMUV
' r?BH2UM2tinT2`KmiiBQMUMmKX#2;BMUV- MmKX2M/UVVVc
`2im`M `2bmHic
8.3.3
ff G22i*Q/2- S2`KmiiBQMb
ff
ff
PUM5V
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = T2`Kmi2Up2+iQ`IBMi= MmKV &
bQ`iUMmKX#2;BMUV- MmKX2M/UVVc
p2+iQ`Ip2+iQ`IBMi== `2bmHic
p2+iQ`IBMi= Ti?c ff
/7bUMmK- Ti?- `2bmHiVc
`2im`M `2bmHic
'
T`Bpi2,
pQB/ /7bU+QMbi p2+iQ`IBMi= MmK- p2+iQ`IBMi= Ti?p2+iQ`Ip2+iQ`IBMi= = `2bmHiV &
B7 UTi?XbBx2UV 44 MmKXbBx2UVV & ff
`2bmHiXTmb?n#+FUTi?Vc
`2im`Mc
'
144
ff
7Q` UmiQ B , MmKV &
ff
B
Ti?
miQ TQb 4 7BM/UTi?X#2;BMUV- Ti?X2M/UV- BVc
'
'c
'
B7 UTQb 44 Ti?X2M/UVV &
Ti?XTmb?n#+FUBVc
/7bUMmK- Ti?- `2bmHiVc
Ti?XTQTn#+FUVc
'
Next Permutation,
2.1.12
Permutation Sequence,
Permutations II,
Combinations,
2.1.13
8.4
8.5
8.4 Permutations II
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example, (R-R-k) have the following unique permutations: (R-R-k)- (R-k-R), and (k-R-R).
8.4.1 next_permutation()
bi/,,M2tinT2`KmiiBQMUV
8.4.2
next_permutation()
bi/,,M2tinT2`KmiiBQMUV
8.4.3
T2`Kmi2UV
8.4 Permutations II
ff G22i*Q/2- S2`KmiiBQMb AA
ff
PUM5V
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = T2`Kmi2lMB[m2Up2+iQ`IBMi= MmKV &
bQ`iUMmKX#2;BMUV- MmKX2M/UVVc
mMQ`/2`2/nKTIBMi- BMi= +QmMinKTc ff
7Q`n2+?UMmKX#2;BMUV- MmKX2M/UV- (+QmMinKT)UBMi 2V &
B7 U+QmMinKTX7BM/U2V 54 +QmMinKTX2M/UVV
+QmMinKT(2)YYc
2Hb2
+QmMinKT(2) 4 Rc
'Vc
ff
KT
TB`
p2+iQ`
p2+iQ`ITB`IBMi- BMi= = 2H2Kbc
7Q`n2+?U+QmMinKTX#2;BMUV- +QmMinKTX2M/UV(2H2Kb)U+QMbi TB`IBMi- BMi= 2V &
2H2KbXTmb?n#+FU2Vc
'Vc
p2+iQ`Ip2+iQ`IBMi== `2bmHic ff
p2+iQ`IBMi= Tc ff
'
M 4 MmKXbBx2UVc
T2`Kmi2U2H2KbX#2;BMUV- 2H2KbX2M/UV- T- `2bmHiVc
`2im`M `2bmHic
T`Bpi2,
bBx2ni Mc
ivT2/27 p2+iQ`ITB`IBMi- BMi= =,,+QMbinBi2`iQ` Ai2`c
pQB/ T2`Kmi2UAi2` 7B`bi- Ai2` Hbi- p2+iQ`IBMi= Tp2+iQ`Ip2+iQ`IBMi= = `2bmHiV &
B7 UM 44 TXbBx2UVV & ff
`2bmHiXTmb?n#+FUTVc
'
ff
7Q` UmiQ B 4 7B`bic B 54 Hbic BYYV &
BMi +QmMi 4 yc ff
B
T
7Q` UmiQ D 4 TX#2;BMUVc D 54 TX2M/UVc DYYV &
B7 UB@=7B`bi 44 DV &
+QmMi YYc
'
'
B7 U+QmMi I B@=b2+QM/V &
TXTmb?n#+FUB@=7B`biVc
T2`Kmi2U7B`bi- Hbi- T- `2bmHiVc
145
146
'
'c
'
'
TXTQTn#+FUVc ff
Next Permutation,
2.1.12
Permutation Sequence,
Permutations,
Combinations,
2.1.13
8.3
8.5
8.5 Combinations
Given two integers n and k, return all possible combinations of k numbers out of 1...n.
For example, If n = 4 and k = 2, a solution is:
(
(k-9)(j-9)(k-j)(R-k)(R-j)(R-9)-
8.5.1
ff G22i*Q/2- *QK#BMiBQMb
ff
ff
PUM5V
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = +QK#BM2UBMi M- BMi FV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
p2+iQ`IBMi= Ti?c
/7bUM- F- R- y- Ti?- `2bmHiVc
`2im`M `2bmHic
'
T`Bpi2,
ff bi`i
- +m`
biiB+ pQB/ /7bUBMi M- BMi F- BMi bi`i- BMi +m`p2+iQ`IBMi= Ti?- p2+iQ`Ip2+iQ`IBMi= = `2bmHiV &
B7 U+m` 44 FV &
`2bmHiXTmb?n#+FUTi?Vc
8.6 Letter Combinations of a Phone Number
'
'c
'
7Q` UBMi B 4 bi`ic B I4 Mc YYBV &
Ti?XTmb?n#+FUBVc
/7bUM- F- B Y R- +m` Y R- Ti?- `2bmHiVc
Ti?XTQTn#+FUVc
'
8.5.2
ff G22i*Q/2- *QK#BMiBQMb
ff mb2 T`2pnT2`KmiiBQMUV
ff
PUUM@FV5V
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = +QK#BM2UBMi M- BMi FV &
p2+iQ`IBMi= pHm2bUMVc
BQiUpHm2bX#2;BMUV- pHm2bX2M/UV- RVc
p2+iQ`I#QQH= b2H2+iUM- 7Hb2Vc
7BHHnMUb2H2+iX#2;BMUV- F- i`m2Vc
'c
'
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
/Q&
p2+iQ`IBMi= QM2UFVc
7Q` UBMi B 4 y- BM/2t 4 yc B I Mc YYBV
B7 Ub2H2+i(B)V
QM2(BM/2tYY) 4 pHm2b(B)c
`2bmHiXTmb?n#+FUQM2Vc
' r?BH2UT`2pnT2`KmiiBQMUb2H2+iX#2;BMUV- b2H2+iX2M/UVVVc
`2im`M `2bmHic
Next Permutation,
2.1.12
Permutation Sequence,
Permutations,
Permutations II,
2.1.13
8.3
8.4
8.6 Letter Combinations of a Phone Number
Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
147
148
8-1
Phone Keyboard
Input:Digit string ]kj]
Output: (]/]- ]2]- ]7]- ]#/]- ]#2]- ]#7]- ]+/]- ]+2]- ]+7]).
Note: Although the above answer is in lexicographical order, your answer could be in any order you
want.
8.6.1
ff G22i*Q/2- G2ii2` *QK#BMiBQMb Q7 S?QM2 LmK#2`
ff
PUjMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
+QMbi p2+iQ`Ibi`BM;= F2v#Q`/ & ] ]- ]]- ]#+]- ]/27]- ff ^y^-^R^-^k^-XXX
];?B]- ]DFH]- ]KMQ]- ]T[`b]- ]imp]- ]rtvx] 'c
p2+iQ`Ibi`BM;= H2ii2`*QK#BMiBQMb U+QMbi bi`BM; /B;BibV &
p2+iQ`Ibi`BM;= `2bmHic
B7 U/B;BibX2KTivUVV `2im`M `2bmHic
/7bU/B;Bib- y- ]]- `2bmHiVc
`2im`M `2bmHic
'
pQB/ /7bU+QMbi bi`BM; /B;Bib- bBx2ni +m`- bi`BM; Ti?p2+iQ`Ibi`BM;= `2bmHiV &
B7 U+m` 44 /B;BibXbBx2UVV &
`2bmHiXTmb?n#+FUTi?Vc
`2im`Mc
'
7Q` UmiQ + , F2v#Q`/(/B;Bib(+m`) @ ^y^)V &
/7bU/B;Bib- +m` Y R- Ti? Y +- `2bmHiVc
'
149
8.6 Letter Combinations of a Phone Number
'
'c
8.6.2
ff G22i*Q/2- G2ii2` *QK#BMiBQMb Q7 S?QM2 LmK#2`
ff
PUjMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
+QMbi p2+iQ`Ibi`BM;= F2v#Q`/ & ] ]- ]]- ]#+]- ]/27]- ff ^y^-^R^-^k^-XXX
];?B]- ]DFH]- ]KMQ]- ]T[`b]- ]imp]- ]rtvx] 'c
p2+iQ`Ibi`BM;= H2ii2`*QK#BMiBQMb U+QMbi bi`BM; /B;BibV &
B7 U/B;BibX2KTivUVV `2im`M p2+iQ`Ibi`BM;=UVc
p2+iQ`Ibi`BM;= `2bmHiUR- ]]Vc
7Q` UmiQ / , /B;BibV &
+QMbi bBx2ni M 4 `2bmHiXbBx2UVc
+QMbi bBx2ni K 4 F2v#Q`/(/ @ ^y^)XbBx2UVc
`2bmHiX`2bBx2UM
KVc
7Q` UbBx2ni B 4 yc B I Kc YYBV
+QTvU`2bmHiX#2;BMUV- `2bmHiX#2;BMUV Y M- `2bmHiX#2;BMUV Y M
7Q` UbBx2ni B 4 yc B I Kc YYBV &
miQ #2;BM 4 `2bmHiX#2;BMUVc
7Q`n2+?U#2;BM Y M
B- #2;BM Y M
b Y4 F2v#Q`/(/ @ ^y^)(B)c
'Vc
'
'c
'
'
`2im`M `2bmHic
UBYRV- ()Ubi`BM; bV &
BVc
A*
9.1 Word Ladder
Given two words (start and end), and a dictionary, find the length of shortest transformation sequence
from start to end, such that:
Only one letter can be changed at a time
Each intermediate word must exist in the dictionary
For example, Given:
bi`i 4 ]?Bi]
2M/ 4 ]+Q;]
/B+i 4 (]?Qi]-]/Qi]-]/Q;]-]HQi]-]HQ;])
As one shortest transformation is ]?Bi] @= ]?Qi] @= ]/Qi] @= ]/Q;] @= ]+Q;], return its length 5.
Note:
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
150
151
9.1 Word Ladder
ffG22i*Q/2- qQ`/ G//2`
ff
PUMV
bi`m+i bii2ni &
bi`BM; rQ`/c
BMi H2p2Hc
PUMV
bii2niUV & rQ`/ 4 ]]c H2p2H 4 yc '
bii2niU+QMbi bi`BM; rQ`/- BMi H2p2HV &
i?Bb@=rQ`/ 4 rQ`/c
i?Bb@=H2p2H 4 H2p2Hc
'
'c
#QQH QT2`iQ`44U+QMbi bii2ni Qi?2`V +QMbi &
`2im`M i?Bb@=rQ`/ 44 Qi?2`XrQ`/c
'
MK2bT+2 bi/ &
i2KTHi2I= bi`m+i ?b?Ibii2ni= &
Tm#HB+,
bBx2ni QT2`iQ`UVU+QMbi bii2ni bV +QMbi &
`2im`M bi`n?b?UbXrQ`/Vc
'
T`Bpi2,
bi/,,?b?Ibi/,,bi`BM;= bi`n?b?c
'c
'
+Hbb aQHmiBQM &
Tm#HB+,
BMi H//2`G2M;i?U+QMbi bi`BM; bi`i- +QMbi bi`BM; 2M/+QMbi mMQ`/2`2/nb2iIbi`BM;= /B+iV &
[m2m2Ibii2ni= [c
mMQ`/2`2/nb2iIbii2ni= pBbBi2/c ff
miQ bii2nBbnpHB/ 4 ()U+QMbi bii2ni bV &
`2im`M /B+iX7BM/UbXrQ`/V 54 /B+iX2M/UV %% bXrQ`/ 44 2M/c
'c
miQ bii2nBbni`;2i 4 ()U+QMbi bii2ni bV &`2im`M bXrQ`/ 44 2M/c 'c
miQ bii2n2ti2M/ 4 ()U+QMbi bii2ni bV &
mMQ`/2`2/nb2iIbii2ni= `2bmHic
7Q` UbBx2ni B 4 yc B I bXrQ`/XbBx2UVc YYBV &
bii2ni M2rnbii2UbXrQ`/- bXH2p2H Y RVc
7Q` U+?` + 4 ^^c + I4 ^x^c +YYV &
ff
B7 U+ 44 M2rnbii2XrQ`/(B)V +QMiBMm2c
brTU+- M2rnbii2XrQ`/(B)Vc
152
'
'c
'
B7 Ubii2nBbnpHB/UM2rnbii2V
pBbBi2/X7BM/UM2rnbii2V 44 pBbBi2/X2M/UVV &
`2bmHiXBMb2`iUM2rnbii2Vc
'
brTU+- M2rnbii2XrQ`/(B)Vc ff
`2im`M `2bmHic
bii2ni bi`inbii2Ubi`i- yVc
[XTmb?Ubi`inbii2Vc
pBbBi2/XBMb2`iUbi`inbii2Vc
r?BH2 U5[X2KTivUVV &
ff
+QMbi miQ TQTUV
ff
+QMbi miQ bii2 4 [X7`QMiUVc
[XTQTUVc
B7 Ubii2nBbni`;2iUbii2VV &
`2im`M bii2XH2p2H Y Rc
'
+QMbi miQ M2rnbii2b 4 bii2n2ti2M/Ubii2Vc
7Q` U+QMbi miQ M2rnbii2 , M2rnbii2bV &
[XTmb?UM2rnbii2Vc
pBbBi2/XBMb2`iUM2rnbii2Vc
'
'c
'
'
`2im`M yc
ffG22i*Q/2- qQ`/ G//2`
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi H//2`G2M;i?U+QMbi bi`BM; bi`i- +QMbi bi`BM; 2M/+QMbi mMQ`/2`2/nb2iIbi`BM;= /B+iV &
[m2m2Ibi`BM;= +m``2Mi- M2tic
ff
mMQ`/2`2/nb2iIbi`BM;= pBbBi2/c ff
BMi H2p2H 4 @Rc
ff
miQ bii2nBbnpHB/ 4 ()U+QMbi bi`BM; bV &
`2im`M /B+iX7BM/UbV 54 /B+iX2M/UV %% b 44 2M/c
'c
miQ bii2nBbni`;2i 4 ()U+QMbi bi`BM; bV &`2im`M b 44 2M/c'c
miQ bii2n2ti2M/ 4 ()U+QMbi bi`BM; bV &
mMQ`/2`2/nb2iIbi`BM;= `2bmHic
153
9.1 Word Ladder
7Q` UbBx2ni B 4 yc B I bXbBx2UVc YYBV &
bi`BM; M2rnrQ`/UbVc
7Q` U+?` + 4 ^^c + I4 ^x^c +YYV &
ff
B7 U+ 44 M2rnrQ`/(B)V +QMiBMm2c
brTU+- M2rnrQ`/(B)Vc
'
'c
'
B7 Ubii2nBbnpHB/UM2rnrQ`/V
pBbBi2/X7BM/UM2rnrQ`/V 44 pBbBi2/X2M/UVV &
`2bmHiXBMb2`iUM2rnrQ`/Vc
'
brTU+- M2rnrQ`/(B)Vc ff
`2im`M `2bmHic
+m``2MiXTmb?Ubi`iVc
pBbBi2/XBMb2`iUbi`iVc
r?BH2 U5+m``2MiX2KTivUVV &
YYH2p2Hc
r?BH2 U5+m``2MiX2KTivUVV &
ff
+QMbi miQ TQTUV
ff
+QMbi miQ bii2 4 +m``2MiX7`QMiUVc
+m``2MiXTQTUVc
B7 Ubii2nBbni`;2iUbii2VV &
`2im`M H2p2H Y Rc
'
+QMbi miQ M2rnbii2b 4 bii2n2ti2M/Ubii2Vc
7Q` U+QMbi miQ M2rnbii2 , M2rnbii2bV &
M2tiXTmb?UM2rnbii2Vc
pBbBi2/XBMb2`iUM2rnbii2Vc
'
'
brTUM2ti- +m``2MiVc
'c
'
'
`2im`M yc
Word Ladder II
9.2
154
9.2 Word Ladder II
Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from start
to end, such that:
Only one letter can be changed at a time
Each intermediate word must exist in the dictionary
For example, Given:
bi`i 4 ]?Bi]
2M/ 4 ]+Q;]
/B+i 4 (]?Qi]-]/Qi]-]/Q;]-]HQi]-]HQ;])
Return
(
)
(]?Bi]-]?Qi]-]/Qi]-]/Q;]-]+Q;])(]?Bi]-]?Qi]-]HQi]-]HQ;]-]+Q;])
Note:
All words have the same length.
All words contain only lowercase alphabetic characters.
Word Ladder
BFS
ffG22i*Q/2- qQ`/ G//2` AA
ff
PUMV
bi`m+i bii2ni &
bi`BM; rQ`/c
BMi H2p2Hc
PUMV
bii2niUV & rQ`/ 4 ]]c H2p2H 4 yc '
bii2niU+QMbi bi`BM; rQ`/- BMi H2p2HV &
i?Bb@=rQ`/ 4 rQ`/c
i?Bb@=H2p2H 4 H2p2Hc
'
155
9.2 Word Ladder II
'c
#QQH QT2`iQ`44U+QMbi bii2ni Qi?2`V +QMbi &
`2im`M i?Bb@=rQ`/ 44 Qi?2`XrQ`/c
'
MK2bT+2 bi/ &
i2KTHi2I= bi`m+i ?b?Ibii2ni= &
Tm#HB+,
bBx2ni QT2`iQ`UVU+QMbi bii2ni bV +QMbi &
`2im`M bi`n?b?UbXrQ`/Vc
'
T`Bpi2,
bi/,,?b?Ibi/,,bi`BM;= bi`n?b?c
'c
'
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`Ibi`BM;= = 7BM/G//2`bU+QMbi bi`BM; bi`i+QMbi bi`BM; 2M/- +QMbi mMQ`/2`2/nb2iIbi`BM;= /B+iV &
[m2m2Ibii2ni= [c
mMQ`/2`2/nb2iIbii2ni= pBbBi2/c ff
mMQ`/2`2/nKTIbii2ni- p2+iQ`Ibii2ni= = 7i?2`c ff .:
miQ bii2nBbnpHB/ 4 ()U+QMbi bii2ni bV &
`2im`M /B+iX7BM/UbXrQ`/V 54 /B+iX2M/UV %% bXrQ`/ 44 2M/c
'c
miQ bii2nBbni`;2i 4 ()U+QMbi bii2ni bV &`2im`M bXrQ`/ 44 2M/c 'c
miQ bii2n2ti2M/ 4 ()U+QMbi bii2ni bV &
mMQ`/2`2/nb2iIbii2ni= `2bmHic
7Q` UbBx2ni B 4 yc B I bXrQ`/XbBx2UVc YYBV &
bii2ni M2rnbii2UbXrQ`/- bXH2p2H Y RVc
7Q` U+?` + 4 ^^c + I4 ^x^c +YYV &
ff
B7 U+ 44 M2rnbii2XrQ`/(B)V +QMiBMm2c
brTU+- M2rnbii2XrQ`/(B)Vc
B7 Ubii2nBbnpHB/UM2rnbii2VV &
miQ pBbBi2/nBi2` 4 pBbBi2/X7BM/UM2rnbii2Vc
B7 UpBbBi2/nBi2` 54 pBbBi2/X2M/UVV &
B7 UpBbBi2/nBi2`@=H2p2H I M2rnbii2XH2p2HV &
ff /Q MQi?BM;
' 2Hb2 B7 UpBbBi2/nBi2`@=H2p2H 44 M2rnbii2XH2p2HV &
`2bmHiXBMb2`iUM2rnbii2Vc
' 2Hb2 & ff MQi TQbbB#H2
i?`Qr bi/,,HQ;B+n2``Q`U]MQi TQbbB#H2 iQ ;2i ?2`2]Vc
'
' 2Hb2 &
`2bmHiXBMb2`iUM2rnbii2Vc
156
'
'c
'
'
'
brTU+- M2rnbii2XrQ`/(B)Vc ff
`2im`M `2bmHic
p2+iQ`Ip2+iQ`Ibi`BM;== `2bmHic
bii2ni bi`inbii2Ubi`i- yVc
[XTmb?Ubi`inbii2Vc
pBbBi2/XBMb2`iUbi`inbii2Vc
r?BH2 U5[X2KTivUVV &
ff
+QMbi miQ TQTUV
ff
+QMbi miQ bii2 4 [X7`QMiUVc
[XTQTUVc
ff
ff
B7 U5`2bmHiX2KTivUV bii2XH2p2H Y R = `2bmHi(y)XbBx2UVV #`2Fc
B7 Ubii2nBbni`;2iUbii2VV &
p2+iQ`Ibi`BM;= Ti?c
;2MnTi?U7i?2`- bi`inbii2- bii2- Ti?- `2bmHiVc
+QMiBMm2c
'
ff
"
ff
[
ff pBbBi2/XBMb2`iUbii2Vc
'
ff
+QMbi miQ M2rnbii2b 4 bii2n2ti2M/Ubii2Vc
7Q` U+QMbi miQ M2rnbii2 , M2rnbii2bV &
B7 UpBbBi2/X7BM/UM2rnbii2V 44 pBbBi2/X2M/UVV &
[XTmb?UM2rnbii2Vc
'
pBbBi2/XBMb2`iUM2rnbii2Vc
7i?2`(M2rnbii2)XTmb?n#+FUbii2Vc
'
`2im`M `2bmHic
'
T`Bpi2,
pQB/ ;2MnTi?UmMQ`/2`2/nKTIbii2ni- p2+iQ`Ibii2ni= = 7i?2`+QMbi bii2ni bi`i- +QMbi bii2ni bii2- p2+iQ`Ibi`BM;= Ti?p2+iQ`Ip2+iQ`Ibi`BM;= = `2bmHiV &
Ti?XTmb?n#+FUbii2XrQ`/Vc
B7 Ubii2 44 bi`iV &
B7 U5`2bmHiX2KTivUVV &
B7 UTi?XbBx2UV I `2bmHi(y)XbBx2UVV &
157
9.2 Word Ladder II
`2bmHiX+H2`UVc
`2bmHiXTmb?n#+FUTi?Vc
`2p2`b2U`2bmHiX#+FUVX#2;BMUV- `2bmHiX#+FUVX2M/UVVc
' 2Hb2 B7 UTi?XbBx2UV 44 `2bmHi(y)XbBx2UVV &
`2bmHiXTmb?n#+FUTi?Vc
`2p2`b2U`2bmHiX#+FUVX#2;BMUV- `2bmHiX#+FUVX2M/UVVc
' 2Hb2 & ff MQi TQbbB#H2
i?`Qr bi/,,HQ;B+n2``Q`U]MQi TQbbB#H2 iQ ;2i ?2`2 ]Vc
'
' 2Hb2 &
`2bmHiXTmb?n#+FUTi?Vc
`2p2`b2U`2bmHiX#+FUVX#2;BMUV- `2bmHiX#+FUVX2M/UVVc
'
'c
'
' 2Hb2 &
7Q` U+QMbi miQ 7 , 7i?2`(bii2)V &
;2MnTi?U7i?2`- bi`i- 7- Ti?- `2bmHiVc
'
'
Ti?XTQTn#+FUVc
ffG22i*Q/2- qQ`/ G//2` AA
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`Ibi`BM;= = 7BM/G//2`bU+QMbi bi`BM; bi`i+QMbi bi`BM; 2M/- +QMbi mMQ`/2`2/nb2iIbi`BM;= /B+iV &
ff
mMQ`/2`2/nb2i
ff
p2+iQ`M2ti
ff
7i?2`
M2ti
mMQ`/2`2/nb2iIbi`BM;= +m``2Mi- M2tic
mMQ`/2`2/nb2iIbi`BM;= pBbBi2/c ff
mMQ`/2`2/nKTIbi`BM;- p2+iQ`Ibi`BM;= = 7i?2`c ff .:
BMi H2p2H 4 @Rc
ff
miQ bii2nBbnpHB/ 4 ()U+QMbi bi`BM; bV &
`2im`M /B+iX7BM/UbV 54 /B+iX2M/UV %% b 44 2M/c
'c
miQ bii2nBbni`;2i 4 ()U+QMbi bi`BM; bV &`2im`M b 44 2M/c'c
miQ bii2n2ti2M/ 4 ()U+QMbi bi`BM; bV &
mMQ`/2`2/nb2iIbi`BM;= `2bmHic
7Q` UbBx2ni B 4 yc B I bXbBx2UVc YYBV &
bi`BM; M2rnrQ`/UbVc
7Q` U+?` + 4 ^^c + I4 ^x^c +YYV &
ff
B7 U+ 44 M2rnrQ`/(B)V +QMiBMm2c
158
9
brTU+- M2rnrQ`/(B)Vc
'
'c
'
B7 Ubii2nBbnpHB/UM2rnrQ`/V
pBbBi2/X7BM/UM2rnrQ`/V 44 pBbBi2/X2M/UVV &
`2bmHiXBMb2`iUM2rnrQ`/Vc
'
brTU+- M2rnrQ`/(B)Vc ff
`2im`M `2bmHic
p2+iQ`Ip2+iQ`Ibi`BM;= = `2bmHic
+m``2MiXBMb2`iUbi`iVc
r?BH2 U5+m``2MiX2KTivUVV &
YY H2p2Hc
ff
ff
B7 U5`2bmHiX2KTivUV H2p2HYR = `2bmHi(y)XbBx2UVV #`2Fc
ff RX
pBbBi2/ff kX
+m``2Mi
pBbBi2/ff
7Q` U+QMbi miQ bii2 , +m``2MiV
pBbBi2/XBMb2`iUbii2Vc
7Q` U+QMbi miQ bii2 , +m``2MiV &
B7 Ubii2nBbni`;2iUbii2VV &
p2+iQ`Ibi`BM;= Ti?c
;2MnTi?U7i?2`- Ti?- bi`i- bii2- `2bmHiVc
+QMiBMm2c
'
'
'
+QMbi miQ M2rnbii2b 4 bii2n2ti2M/Ubii2Vc
7Q` U+QMbi miQ M2rnbii2 , M2rnbii2bV &
M2tiXBMb2`iUM2rnbii2Vc
7i?2`(M2rnbii2)XTmb?n#+FUbii2Vc
'
+m``2MiX+H2`UVc
brTU+m``2Mi- M2tiVc
`2im`M `2bmHic
'
T`Bpi2,
pQB/ ;2MnTi?UmMQ`/2`2/nKTIbi`BM;- p2+iQ`Ibi`BM;= = 7i?2`p2+iQ`Ibi`BM;= Ti?- +QMbi bi`BM; bi`i- +QMbi bi`BM; rQ`/p2+iQ`Ip2+iQ`Ibi`BM;= = `2bmHiV &
Ti?XTmb?n#+FUrQ`/Vc
B7 UrQ`/ 44 bi`iV &
B7 U5`2bmHiX2KTivUVV &
159
9.2 Word Ladder II
'c
'
B7 UTi?XbBx2UV I `2bmHi(y)XbBx2UVV &
`2bmHiX+H2`UVc
`2bmHiXTmb?n#+FUTi?Vc
' 2Hb2 B7UTi?XbBx2UV 44 `2bmHi(y)XbBx2UVV &
`2bmHiXTmb?n#+FUTi?Vc
' 2Hb2 &
ff MQi TQbbB#H2
i?`Qr bi/,,HQ;B+n2``Q`U]MQi TQbbB#H2 iQ ;2i ?2`2]Vc
'
' 2Hb2 &
`2bmHiXTmb?n#+FUTi?Vc
'
`2p2`b2U`2bmHiX#+FUVX#2;BMUV- `2bmHiX#+FUVX2M/UVVc
' 2Hb2 &
7Q` U+QMbi miQ 7 , 7i?2`(rQ`/)V &
;2MnTi?U7i?2`- Ti?- bi`i- 7- `2bmHiVc
'
'
Ti?XTQTn#+FUVc
/B+i
ffG22i*Q/2- qQ`/ G//2` AA
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`Ibi`BM;= = 7BM/G//2`bU+QMbi bi`BM; bi`i+QMbi bi`BM; 2M/- +QMbi mMQ`/2`2/nb2iIbi`BM;= /B+iV &
+QMbi miQ ; 4 #mBH/n;`T?U/B+iVc
p2+iQ`Ibii2ni = TQQHc
[m2m2Ibii2ni = [c ff
ff pHm2
mMQ`/2`2/nKTIbi`BM;- BMi= pBbBi2/c
miQ bii2nBbni`;2i 4 ()U+QMbi bii2ni
bV &`2im`M b@=rQ`/ 44 2M/c 'c
p2+iQ`Ip2+iQ`Ibi`BM;== `2bmHic
[XTmb?U+`2i2nbii2UMmHHTi`- bi`i- y- TQQHVVc
r?BH2 U5[X2KTivUVV &
bii2ni bii2 4 [X7`QMiUVc
[XTQTUVc
ff
ff
B7 U5`2bmHiX2KTivUV bii2@=H2p2HYR = `2bmHi(y)XbBx2UVV #`2Fc
B7 Ubii2nBbni`;2iUbii2VV &
160
9
+QMbi miQ Ti? 4 ;2MnTi?Ubii2Vc
B7 U`2bmHiX2KTivUVV &
`2bmHiXTmb?n#+FUTi?Vc
' 2Hb2 &
B7 UTi?XbBx2UV I `2bmHi(y)XbBx2UVV &
`2bmHiX+H2`UVc
`2bmHiXTmb?n#+FUTi?Vc
' 2Hb2 B7 UTi?XbBx2UV 44 `2bmHi(y)XbBx2UVV &
`2bmHiXTmb?n#+FUTi?Vc
' 2Hb2 &
ff MQi TQbbB#H2
i?`Qr bi/,,HQ;B+n2``Q`U]MQi TQbbB#H2 iQ ;2i ?2`2]Vc
'
'
+QMiBMm2c
'
pBbBi2/(bii2@=rQ`/) 4 bii2@=H2p2Hc
ff
miQ Bi2` 4 ;X7BM/Ubii2@=rQ`/Vc
B7 UBi2` 44 ;X2M/UVV +QMiBMm2c
7Q` U+QMbi miQ M2B;?#Q` , Bi2`@=b2+QM/V &
miQ pBbBi2/nBi2` 4 pBbBi2/X7BM/UM2B;?#Q`Vc
B7 UpBbBi2/nBi2` 54 pBbBi2/X2M/UV
pBbBi2/nBi2`@=b2+QM/ I bii2@=H2p2H Y RV &
+QMiBMm2c
'
'
'
'
[XTmb?U+`2i2nbii2Ubii2- M2B;?#Q`- bii2@=H2p2H Y R- TQQHVVc
ff `2H2b2 HH bii2b
7Q` UmiQ bii2 , TQQHV &
/2H2i2 bii2c
'
`2im`M `2bmHic
T`Bpi2,
bi`m+i bii2ni &
bii2ni 7i?2`c
bi`BM; rQ`/c
BMi H2p2Hc ff
'c
bii2niUbii2ni 7i?2`n- +QMbi bi`BM; rQ`/n- BMi H2p2HnV ,
7i?2`U7i?2`nV- rQ`/UrQ`/nV- H2p2HUH2p2HnV &'
bii2ni
+`2i2nbii2Ubii2ni T`2Mi- +QMbi bi`BM; pHm2BMi H2M;i?- p2+iQ`Ibii2ni = TQQHV &
161
9.2 Word Ladder II
bii2ni MQ/2 4 M2r bii2niUT`2Mi- pHm2- H2M;i?Vc
TQQHXTmb?n#+FUMQ/2Vc
`2im`M MQ/2c
'
p2+iQ`Ibi`BM;= ;2MnTi?U+QMbi bii2ni
p2+iQ`Ibi`BM;= Ti?c
MQ/2V &
r?BH2UMQ/2 54 MmHHTi`V &
Ti?XTmb?n#+FUMQ/2@=rQ`/Vc
MQ/2 4 MQ/2@=7i?2`c
'
'
`2p2`b2UTi?X#2;BMUV- Ti?X2M/UVVc
`2im`M Ti?c
mMQ`/2`2/nKTIbi`BM;- mMQ`/2`2/nb2iIbi`BM;= = #mBH/n;`T?U
+QMbi mMQ`/2`2/nb2iIbi`BM;= /B+iV &
mMQ`/2`2/nKTIbi`BM;- mMQ`/2`2/nb2iIbi`BM;= = /D+2M+vnHBbic
7Q` U+QMbi miQ rQ`/ , /B+iV &
7Q` UbBx2ni B 4 yc B I rQ`/XbBx2UVc YYBV &
bi`BM; M2rnrQ`/UrQ`/Vc
7Q` U+?` + 4 ^^c + I4 ^x^c +YYV &
ff
B7 U+ 44 M2rnrQ`/(B)V +QMiBMm2c
brTU+- M2rnrQ`/(B)Vc
'
'c
'
'
B7 UU/B+iX7BM/UM2rnrQ`/V 54 /B+iX2M/UVVV &
miQ Bi2` 4 /D+2M+vnHBbiX7BM/UrQ`/Vc
B7 UBi2` 54 /D+2M+vnHBbiX2M/UVV &
Bi2`@=b2+QM/XBMb2`iUM2rnrQ`/Vc
' 2Hb2 &
/D+2M+vnHBbiXBMb2`iUTB`Ibi`BM;mMQ`/2`2/nb2iIbi`BM;==UrQ`/- mMQ`/2`2/nb2iIbi`BM;=UVVVc
/D+2M+vnHBbi(rQ`/)XBMb2`iUM2rnrQ`/Vc
'
'
brTU+- M2rnrQ`/(B)Vc ff
'
`2im`M /D+2M+vnHBbic
Word Ladder
9.1
162
9.3 Surrounded Regions
Given a 2D board containing ^s^ and ^P^, capture all regions surrounded by ^s^.
A region is captured by flipping all ^P^s into ^s^s in that surrounded region .
For example,
s
s
s
s
s
P
s
P
s
P
P
s
s
s
s
s
After running your function, the board should be:
s
s
s
s
s
s
s
P
s
s
s
s
s
s
s
s
^P^
ff G22i*Q/2- am``QmM/2/ _2;BQMb
ff "6a
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
pQB/ bQHp2Up2+iQ`Ip2+iQ`I+?`== #Q`/V &
B7 U#Q`/X2KTivUVV `2im`Mc
+QMbi BMi K 4 #Q`/XbBx2UVc
+QMbi BMi M 4 #Q`/(y)XbBx2UVc
7Q` UBMi B 4 yc B I Mc BYYV &
#7bU#Q`/- y- BVc
#7bU#Q`/- K @ R- BVc
'
7Q` UBMi D 4 Rc D I K @ Rc DYYV &
#7bU#Q`/- D- yVc
#7bU#Q`/- D- M @ RVc
'
7Q` UBMi B 4 yc B I Kc BYYV
7Q` UBMi D 4 yc D I Mc DYYV
B7 U#Q`/(B)(D) 44 ^P^V
#Q`/(B)(D) 4 ^s^c
2Hb2 B7 U#Q`/(B)(D) 44 ^Y^V
#Q`/(B)(D) 4 ^P^c
'
T`Bpi2,
pQB/ #7bUp2+iQ`Ip2+iQ`I+?`== #Q`/- BMi B- BMi DV &
9.3 Surrounded Regions
ivT2/27 TB`IBMi- BMi= bii2nic
[m2m2Ibii2ni= [c
+QMbi BMi K 4 #Q`/XbBx2UVc
+QMbi BMi M 4 #Q`/(y)XbBx2UVc
miQ bii2nBbnpHB/ 4 ()U+QMbi bii2ni bV &
+QMbi BMi t 4 bX7B`bic
+QMbi BMi v 4 bXb2+QM/c
B7 Ut I y %% t =4 K %% v I y %% v =4 M %% #Q`/(t)(v) 54 ^P^V
`2im`M 7Hb2c
`2im`M i`m2c
'c
miQ bii2n2ti2M/ 4 ()U+QMbi bii2ni bV &
p2+iQ`Ibii2ni= `2bmHic
+QMbi BMi t 4 bX7B`bic
+QMbi BMi v 4 bXb2+QM/c
ff
+QMbi bii2ni M2rnbii2b(9) 4 &&t@R-v'- &tYR-v'&t-v@R'- &t-vYR''c
7Q` UBMi F 4 yc F I 9c YYFV &
B7 Ubii2nBbnpHB/UM2rnbii2b(F)VV &
ff
#Q`/(M2rnbii2b(F)X7B`bi)(M2rnbii2b(F)Xb2+QM/) 4 ^Y^c
`2bmHiXTmb?n#+FUM2rnbii2b(F)Vc
'
'
'c
'c
'
`2im`M `2bmHic
bii2ni bi`i 4 & B- D 'c
B7 Ubii2nBbnpHB/Ubi`iVV &
#Q`/(B)(D) 4 ^Y^c
[XTmb?Ubi`iVc
'
r?BH2 U5[X2KTivUVV &
miQ +m` 4 [X7`QMiUVc
[XTQTUVc
miQ M2rnbii2b 4 bii2n2ti2M/U+m`Vc
7Q` UmiQ b , M2rnbii2bV [XTmb?UbVc
'
163
164
9.4
9.4.1
DAG
9.4.2
1.
(a)
(b)
i.
ii.
4
2.
3.
4.
BFS
(a)
(b)
DAG
pBbBi2/
pBbBi2/
(c)
i.
mMQ`/2`2/n@
ii.
b2i
head
next
??
165
9.4
iii.
5.
9.4.3
hashset
[m2m2
p2+iQ`
bii2ni
1.
H2p2H
H2p2H
[m2m2
A*
T`BQ`Bivn[m2m2
+m``2Mi- M2ti
2.
H2p2H
H2p2H
H2p2H
(#QQH pBbBi2/(ahh1nJs)
hashset
pBbBi2/Uahh1nJs- 7Hb2V)
STL
STL
b2i
p2+iQ`I#QQH=
mMQ`/2`2/nb2i
mMQ`/2`2/nKTIbii2ni- bii2ni = 7i?2`
(bii2ni MQ/2b(ahh1n@
STATE_MAX
Js))
f
f
bi`m+i bii2ni &
BMi /iRc f
BMi /ikc f
ff /iLc
f
BMi +iBQMc f
BMi H2p2Hc f
'c
ff
bfs_common.h
X
X
f
f
#QQH QT2`iQ`44U+QMbi bii2ni Qi?2`V +QMbi &
`2im`M i`m2c ff
'
?b?
ff
R
?b?
MK2bT+2 bi/ &
i2KTHi2I= bi`m+i ?b?Ibii2ni= &
@R
f
f
166
'c
'
9
bBx2ni QT2`iQ`UVU+QMbi bii2ni tV +QMbi &
`2im`M yc ff
'
ff
k
?b?
+Hbb >b?2` &
Tm#HB+,
>b?2`UBMi nKV , KUnKV &'c
bBx2ni QT2`iQ`UVU+QMbi bii2ni bV +QMbi &
`2im`M yc ff
'
T`Bpi2,
BMi Kc ff
'c
f
!#`B27
X
!T`K(BM) 7i?2`
!T`K(BM) i`;2i
!`2im`M
i`;2i
f
p2+iQ`Ibii2ni= ;2MnTi?U+QMbi mMQ`/2`2/nKTIbii2ni- bii2ni= 7i?2`+QMbi bii2ni i`;2iV &
p2+iQ`Ibii2ni= Ti?c
Ti?XTmb?n#+FUi`;2iVc
7Q` Ubii2ni +m` 4 i`;2ic 7i?2`X7BM/U+m`V 54 7i?2`X2M/UVc
+m` 4 7i?2`XiU+m`VV
Ti?XTmb?n#+FU+m`Vc
`2p2`b2UTi?X#2;BMUV- Ti?X2M/UVVc
'
f
`2im`M Ti?c
X
!T`K(BM) 7i?2`
!T`K(BM) bi`i
!T`K(BM) bii2
!`2im`M
f
pQB/ ;2MnTi?UmMQ`/2`2/nKTIbii2ni- p2+iQ`Ibii2ni= = 7i?2`+QMbi bi`BM; bi`i- +QMbi bii2ni bii2- p2+iQ`Ibii2ni= Ti?p2+iQ`Ip2+iQ`Ibii2ni= = `2bmHiV &
Ti?XTmb?n#+FUbii2Vc
B7 Ubii2 44 bi`iV &
B7 U5`2bmHiX2KTivUVV &
B7 UTi?XbBx2UV I `2bmHi(y)XbBx2UVV &
`2bmHiX+H2`UVc
`2bmHiXTmb?n#+FUTi?Vc
167
9.4
'
' 2Hb2 B7UTi?XbBx2UV 44 `2bmHi(y)XbBx2UVV &
`2bmHiXTmb?n#+FUTi?Vc
' 2Hb2 &
ff MQi TQbbB#H2
i?`Qr bi/,,HQ;B+n2``Q`U]MQi TQbbB#H2 iQ ;2i ?2`2]Vc
'
' 2Hb2 &
`2bmHiXTmb?n#+FUTi?Vc
'
`2p2`b2U`2bmHiX#+FUVX#2;BMUV- `2bmHiX#+FUVX2M/UVVc
' 2Hb2 &
7Q` U+QMbi miQ 7 , 7i?2`(bii2)V &
;2MnTi?U7i?2`- bi`i- 7- Ti?- `2bmHiVc
'
'
Ti?XTQTn#+FUVc
bfs_common.h
OBM+Hm/2 ]#7bn+QKKQMX?]
f
bfs_template.cpp
!#`B27
X
!T`K(BM) bi`i
!T`K(BM) /i
!`2im`M
f
p2+iQ`Ibii2ni= #7bUbii2ni bi`i- +QMbi p2+iQ`Ip2+iQ`IBMi== ;`B/V &
[m2m2Ibii2ni= [c ff
mMQ`/2`2/nb2iIbii2ni= pBbBi2/c ff
mMQ`/2`2/nKTIbii2ni- bii2ni= 7i?2`c ff
ff
miQ bii2nBbnpHB/ 4 ()U+QMbi bii2ni bV & f XXX f 'c
ff
miQ bii2nBbni`;2i 4 ()U+QMbi bii2ni bV & f XXX f 'c
ff
miQ bii2n2ti2M/ 4 ()U+QMbi bii2ni bV &
mMQ`/2`2/nb2iIbii2ni= `2bmHic
7Q` Uf XXX fV &
+QMbi bii2ni M2rnbii2 4 f XXX fc
B7 Ubii2nBbnpHB/UM2rnbii2V
pBbBi2/X7BM/UM2rnbii2V 54 pBbBi2/X2M/UVV &
`2bmHiXBMb2`iUM2rnbii2Vc
'
'
168
'c
`2im`M `2bmHic
bb2`i Ubi`iXH2p2H 44 yVc
[XTmb?Ubi`iVc
r?BH2 U5[X2KTivUVV &
ff
+QMbi miQ TQTUV
ff
+QMbi bii2ni bii2 4 [X7`QMiUVc
[XTQTUVc
pBbBi2/XBMb2`iUbii2Vc
ff
B7 Ubii2nBbni`;2iUbii2VV &
`2im`M `2im`M ;2MnTi?U7i?2`- i`;2iVc ff
ff `2im`M bii2XH2p2H Y Rc ff
'
'
'
ff
p2+iQ`Ibii2ni= M2rnbii2b 4 bii2n2ti2M/Ubii2Vc
7Q` U+QMbi miQ M2rnbii2 , M2rnbii2bV &
[XTmb?UM2rnbii2Vc
7i?2`(M2rnbii2) 4 bii2c ff
ff pBbBi2/XBMb2`iUbii2Vc ff
ff
[
ff
pBbBi2/
ff
- pBbBi2/XBMb2`iUbi`iV
'
pBbBi2/
r?BH2
`2im`M p2+iQ`Ibii2ni=UVc
ff`2im`M yc
bfs_template.cpp
OBM+Hm/2 ]#7bn+QKKQMX?]
f
!#`B27
X
!T`K(BM) bi`i
!T`K(BM) /i
!`2im`M
f
p2+iQ`Ibii2ni= #7bU+QMbi bii2ni bi`i- +QMbi ivT2 /iV &
[m2m2Ibii2ni= M2ti- +m``2Mic ff
mMQ`/2`2/nb2iIbii2ni= pBbBi2/c ff
mMQ`/2`2/nKTIbii2ni- bii2ni= 7i?2`c ff
BMi H2p2H 4 @Rc
ff
ff
bfs_template1.cpp
169
9.4
miQ bii2nBbnpHB/ 4 ()U+QMbi bii2ni bV & f XXX f 'c
ff
miQ bii2nBbni`;2i 4 ()U+QMbi bii2ni bV & f XXX f 'c
ff
miQ bii2n2ti2M/ 4 ()U+QMbi bii2ni bV &
mMQ`/2`2/nb2iIbii2ni= `2bmHic
7Q` Uf XXX fV &
+QMbi bii2ni M2rnbii2 4 f XXX fc
B7 Ubii2nBbnpHB/UM2rnbii2V
pBbBi2/X7BM/UM2rnbii2V 54 pBbBi2/X2M/UVV &
`2bmHiXBMb2`iUM2rnbii2Vc
'
'
`2im`M `2bmHic
'c
+m``2MiXTmb?Ubi`iVc
r?BH2 U5+m``2MiX2KTivUVV &
YYH2p2Hc
r?BH2 U5+m``2MiX2KTivUVV &
ff
+QMbi miQ TQTUV
ff
+QMbi miQ bii2 4 +m``2MiX7`QMiUVc
+m``2MiXTQTUVc
pBbBi2/XBMb2`iUbii2Vc
B7 Ubii2nBbni`;2iUbii2VV &
`2im`M `2im`M ;2MnTi?U7i?2`- bii2Vc ff
ff `2im`M bii2XH2p2H Y Rc ff
'
+QMbi miQ M2rnbii2b 4 bii2n2ti2M/Ubii2Vc
7Q` U+QMbi miQ M2rnbii2 , M2rnbii2bV &
M2tiXTmb?UM2rnbii2Vc
7i?2`(M2rnbii2) 4 bii2c
ff pBbBi2/XBMb2`iUbii2Vc ff
pBbBi2/
ff
+m``2Mi
ff
pBbBi2/
ff
- pBbBi2/XBMb2`iUbi`iV
'
'
'
r?BH2
'
brTUM2ti- +m``2MiVc ff555
`2im`M p2+iQ`Ibii2ni=UVc
ff `2im`M yc
bfs_template1.cpp
170
bfs_template.cpp
!#`B27
X
!T`K(BM) bi`i
!T`K(BM) /i
!`2im`M
f
p2+iQ`Ip2+iQ`Ibii2ni= = #7bU+QMbi bii2ni bi`i- +QMbi ivT2 /iV &
[m2m2Ibii2ni= [c
mMQ`/2`2/nb2iIbii2ni= pBbBi2/c ff
mMQ`/2`2/nKTIbii2ni- p2+iQ`Ibii2ni= = 7i?2`c ff .:
miQ bii2nBbnpHB/ 4 ()U+QMbi bii2ni bV & f XXX f 'c
miQ bii2nBbni`;2i 4 ()U+QMbi bii2ni bV & f XXX f 'c
miQ bii2n2ti2M/ 4 ()U+QMbi bii2ni bV &
mMQ`/2`2/nb2iIbii2ni= `2bmHic
7Q` Uf XXX fV &
+QMbi bii2ni M2rnbii2 4 f XXX fc
B7 Ubii2nBbnpHB/UM2rnbii2VV &
miQ pBbBi2/nBi2` 4 pBbBi2/X7BM/UM2rnbii2Vc
'
'c
'
B7 UpBbBi2/nBi2` 54 pBbBi2/X2M/UVV &
B7 UpBbBi2/nBi2`@=H2p2H I M2rnbii2XH2p2HV &
ff /Q MQi?BM;
' 2Hb2 B7 UpBbBi2/nBi2`@=H2p2H 44 M2rnbii2XH2p2HV &
`2bmHiXBMb2`iUM2rnbii2Vc
' 2Hb2 & ff MQi TQbbB#H2
i?`Qr bi/,,HQ;B+n2``Q`U]MQi TQbbB#H2 iQ ;2i ?2`2]Vc
'
' 2Hb2 &
`2bmHiXBMb2`iUM2rnbii2Vc
'
`2im`M `2bmHic
p2+iQ`Ip2+iQ`Ibi`BM;== `2bmHic
bii2ni bi`inbii2Ubi`i- yVc
[XTmb?Ubi`inbii2Vc
pBbBi2/XBMb2`iUbi`inbii2Vc
r?BH2 U5[X2KTivUVV &
ff
+QMbi miQ TQTUV
ff
+QMbi miQ bii2 4 [X7`QMiUVc
[XTQTUVc
ff
ff
171
9.4
B7 U5`2bmHiX2KTivUV bii2XH2p2H Y R = `2bmHi(y)XbBx2UVV #`2Fc
B7 Ubii2nBbni`;2iUbii2VV &
p2+iQ`Ibi`BM;= Ti?c
;2MnTi?U7i?2`- bi`inbii2- bii2- Ti?- `2bmHiVc
+QMiBMm2c
'
ff
"
ff
[
ff pBbBi2/XBMb2`iUbii2Vc
'
'
ff
+QMbi miQ M2rnbii2b 4 bii2n2ti2M/Ubii2Vc
7Q` U+QMbi miQ M2rnbii2 , M2rnbii2bV &
B7 UpBbBi2/X7BM/UM2rnbii2V 44 pBbBi2/X2M/UVV &
[XTmb?UM2rnbii2Vc
'
pBbBi2/XBMb2`iUM2rnbii2Vc
7i?2`(M2rnbii2)XTmb?n#+FUbii2Vc
'
`2im`M `2bmHic
bfs_template.cpp
OBM+Hm/2 ]#7bn+QKKQMX?]
f
bfs_template.cpp
!#`B27
X
!T`K(BM) bi`i
!T`K(BM) /i
!`2im`M
f
p2+iQ`Ip2+iQ`Ibii2ni= = #7bU+QMbi bii2ni bi`i- +QMbi ivT2 /iV &
ff
mMQ`/2`2/nb2i
ff
p2+iQ`M2ti
ff
7i?2`
M2ti
mMQ`/2`2/nb2iIbi`BM;= +m``2Mi- M2tic
mMQ`/2`2/nb2iIbii2ni= pBbBi2/c ff
mMQ`/2`2/nKTIbii2ni- p2+iQ`Ibii2ni= = 7i?2`c ff .:
BMi H2p2H 4 @Rc
ff
ff
miQ bii2nBbnpHB/ 4 ()U+QMbi bii2ni bV & f XXX f 'c
ff
miQ bii2nBbni`;2i 4 ()U+QMbi bii2ni bV & f XXX f 'c
ff
172
9
miQ bii2n2ti2M/ 4 ()U+QMbi bii2ni bV &
mMQ`/2`2/nb2iIbii2ni= `2bmHic
7Q` Uf XXX fV &
+QMbi bii2ni M2rnbii2 4 f XXX fc
B7 Ubii2nBbnpHB/UM2rnbii2V
pBbBi2/X7BM/UM2rnbii2V 54 pBbBi2/X2M/UVV &
`2bmHiXBMb2`iUM2rnbii2Vc
'
'
`2im`M `2bmHic
'c
p2+iQ`Ip2+iQ`Ibii2ni= = `2bmHic
+m``2MiXBMb2`iUbi`iVc
r?BH2 U5+m``2MiX2KTivUVV &
YY H2p2Hc
ff
ff
B7 U5`2bmHiX2KTivUV H2p2HYR = `2bmHi(y)XbBx2UVV #`2Fc
ff RX
pBbBi2/ff kX
+m``2Mi
pBbBi2/ff
7Q` U+QMbi miQ bii2 , +m``2MiV
pBbBi2/XBMb2`iUbii2Vc
7Q` U+QMbi miQ bii2 , +m``2MiV &
B7 Ubii2nBbni`;2iUbii2VV &
p2+iQ`Ibi`BM;= Ti?c
;2MnTi?U7i?2`- Ti?- bi`i- bii2- `2bmHiVc
+QMiBMm2c
'
'
'
'
+QMbi miQ M2rnbii2b 4 bii2n2ti2M/Ubii2Vc
7Q` U+QMbi miQ M2rnbii2 , M2rnbii2bV &
M2tiXBMb2`iUM2rnbii2Vc
7i?2`(M2rnbii2)XTmb?n#+FUbii2Vc
'
+m``2MiX+H2`UVc
brTU+m``2Mi- M2tiVc
`2im`M `2bmHic
bfs_template.cpp
10
10.1 Palindrome Partitioning
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given b 4 ]#], Return
(
)
(]]-]#])(]]-]]-]#])
O(2n1 )
n1
1
ffG22i*Q/2- SHBM/`QK2 S`iBiBQMBM;
ff
PUkMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`Ibi`BM;== T`iBiBQMUbi`BM; bV &
p2+iQ`Ip2+iQ`Ibi`BM;== `2bmHic
p2+iQ`Ibi`BM;= Ti?c ff
T`iBiBQM
/7bUb- Ti?- `2bmHi- y- RVc
`2im`M `2bmHic
'
ff T`2p
- bi`i
pQB/ /7bUbi`BM; b- p2+iQ`Ibi`BM;= Ti?p2+iQ`Ip2+iQ`Ibi`BM;== `2bmHi- bBx2ni T`2p- bBx2ni bi`iV &
B7 Ubi`i 44 bXbBx2UVV & ff
B7 UBbSHBM/`QK2Ub- T`2p- bi`i @ RVV & ff
Ti?XTmb?n#+FUbXbm#bi`UT`2p- bi`i @ T`2pVVc
173
174
10
`2bmHiXTmb?n#+FUTi?Vc
Ti?XTQTn#+FUVc
'
`2im`Mc
'
'c
'
ff
/7bUb- Ti?- `2bmHi- T`2p- bi`i Y RVc
ff
(T`2p- bi`i@R)
B7 UBbSHBM/`QK2Ub- T`2p- bi`i @ RVV &
ff
Ti?XTmb?n#+FUbXbm#bi`UT`2p- bi`i @ T`2pVVc
/7bUb- Ti?- `2bmHi- bi`i- bi`i Y RVc
Ti?XTQTn#+FUVc
'
#QQH BbSHBM/`QK2U+QMbi bi`BM; b- BMi bi`i- BMi 2M/V &
r?BH2 Ubi`i I 2M/ b(bi`i) 44 b(2M/)V &
YYbi`ic
@@2M/c
'
`2im`M bi`i =4 2M/c
'
2
Combination Sum, Combination Sum II
ffG22i*Q/2- SHBM/`QK2 S`iBiBQMBM;
ff
PUkMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`Ibi`BM;== T`iBiBQMUbi`BM; bV &
p2+iQ`Ip2+iQ`Ibi`BM;== `2bmHic
p2+iQ`Ibi`BM;= Ti?c ff
T`iBiBQM
.6aUb- Ti?- `2bmHi- yVc
`2im`M `2bmHic
'
ff
b(bi`i)
T`iBiBQM
pQB/ .6aUbi`BM; b- p2+iQ`Ibi`BM;= Ti?p2+iQ`Ip2+iQ`Ibi`BM;== `2bmHi- BMi bi`iV &
B7 Ubi`i 44 bXbBx2UVV &
`2bmHiXTmb?n#+FUTi?Vc
`2im`Mc
'
7Q` UBMi B 4 bi`ic B I bXbBx2UVc BYYV &
B7 UBbSHBM/`QK2Ub- bi`i- BVV & ff
B
Ti?XTmb?n#+FUbXbm#bi`Ubi`i- B @ bi`i Y RVVc
.6aUb- Ti?- `2bmHi- B Y RVc ff
Ti?XTQTn#+FUVc ff
'
'
175
10.1 Palindrome Partitioning
'c
'
#QQH BbSHBM/`QK2U+QMbi bi`BM; b- BMi bi`i- BMi 2M/V &
r?BH2 Ubi`i I 2M/ b(bi`i) 44 b(2M/)V &
YYbi`ic
@@2M/c
'
`2im`M bi`i =4 2M/c
'
ff G22i*Q/2- SHBM/`QK2 S`iBiBQMBM;
ff
PUMkV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`Ibi`BM;= = T`iBiBQMUbi`BM; bV &
+QMbi BMi M 4 bXbBx2UVc
#QQH T(M)(M)c ff r?2i?2` b(B-D) Bb THBM/`QK2
7BHHnMUT(y)(y)- M
M- 7Hb2Vc
7Q` UBMi B 4 M @ Rc B =4 yc @@BV
7Q` UBMi D 4 Bc D I Mc YYDV
T(B)(D) 4 b(B) 44 b(D) UUD @ B I kV %% T(B Y R)(D @ R)Vc
'c
'
p2+iQ`Ip2+iQ`Ibi`BM;= = bm#nTHBMb(M)c ff bm# THBM/`QK2b Q7 b(y-B)
7Q` UBMi B 4 M @ Rc B =4 yc @@BV &
7Q` UBMi D 4 Bc D I Mc YYDV
B7 UT(B)(D)V &
+QMbi bi`BM; THBM/`QK2 4 bXbm#bi`UB- D @ B Y RVc
B7 UD Y R I MV &
7Q` UmiQ p , bm#nTHBMb(D Y R)V &
pXBMb2`iUpX#2;BMUV- THBM/`QK2Vc
bm#nTHBMb(B)XTmb?n#+FUpVc
'
' 2Hb2 &
bm#nTHBMb(B)XTmb?n#+FUp2+iQ`Ibi`BM;= & THBM/`QK2 'Vc
'
'
'
`2im`M bm#nTHBMb(y)c
Palindrome Partitioning II
13.3
176
10
10.2 Unique Paths
A robot is located at the top-left corner of a m n grid (marked Start in the diagram below).
The robot can only move either down or right at any point in time. The robot is trying to reach the
bottom-right corner of the grid (marked Finish in the diagram below).
How many possible unique paths are there?
10-1 Above is a 3 7 grid. How many possible unique paths are there?
Note: m and n will be at most 100.
10.2.1
ff G22i*Q/2- lMB[m2 Si?b
ff
ff
PUM9V
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi mMB[m2Si?bUBMi K- BMi MV &
B7 UK I R %% M I RV `2im`M yc ff
B7 UK 44 R M 44 RV `2im`M Rc ff
'c
'
10.2.2
`2im`M mMB[m2Si?bUK @ R- MV Y mMB[m2Si?bUK- M @ RVc
177
10.2 Unique Paths
ff G22i*Q/2- lMB[m2 Si?b
ff
Y
ff
PUMkV
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
BMi mMB[m2Si?bUBMi K- BMi MV &
ff 7(t)(v)
Uy-yV
Ut-vV
7 4 p2+iQ`Ip2+iQ`IBMi= =UK- p2+iQ`IBMi=UM- yVVc
7(y)(y) 4 Rc
`2im`M /7bUK @ R- M @ RVc
'
T`Bpi2,
p2+iQ`Ip2+iQ`IBMi= = 7c ff
BMi /7bUBMi t- BMi vV &
B7 Ut I y %% v I yV `2im`M yc ff
B7 Ut 44 y v 44 yV `2im`M 7(y)(y)c ff
'c
'
B7 U7(t)(v) = yV &
`2im`M 7(t)(v)c
' 2Hb2 &
`2im`M 7(t)(v) 4 /7bUt @ R- vV Y
'
/7bUt- v @ RVc
10.2.3
7(B)(D)
(1, 1)
(i, j)
7(B)(D)47(B@R)(D)Y7(B)(D@R)
ff G22i*Q/2- lMB[m2 Si?b
ff
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi mMB[m2Si?bUBMi K- BMi MV &
p2+iQ`IBMi= 7UM- yVc
7(y) 4 Rc
7Q` UBMi B 4 yc B I Kc BYYV &
7Q` UBMi D 4 Rc D I Mc DYYV &
ff
7(D)
7(D)
ff
7(D)
7(D)
7(D) 4 7(D) Y 7(D @ R)c
'
7(B)(D)
7(B@R)(D)
178
10
'c
'
'
`2im`M 7(M @ R)c
10.2.4
m
m1
m+n2
m1
Cm+n2
ff G22i*Q/2- lMB[m2 Si?b
ff
+Hbb aQHmiBQM &
Tm#HB+,
ivT2/27 HQM; HQM; BMie9nic
ff
- M5fUbi`i@RV5
M UM@RVXXXbi`i
biiB+ BMie9ni 7+iQ`UBMi M- BMi bi`i 4 RV &
BMie9ni `2i 4 Rc
7Q`UBMi B 4 bi`ic B I4 Mc YYBV
`2i 4 Bc
`2im`M `2ic
'
ff
*nMF
biiB+ BMie9ni +QK#BMiBQMUBMi M- BMi FV &
ff
B7 UF 44 yV `2im`M Rc
B7 UF 44 RV `2im`M Mc
'
'c
m1
m+n2
M =4 R
BMie9ni `2i 4 7+iQ`UM- FYRVc
`2i f4 7+iQ`UM @ FVc
`2im`M `2ic
BMi mMB[m2Si?bUBMi K- BMi MV &
ff Kt
M
F
+QK#BMiBQMUV
`2im`M +QK#BMiBQMUKYM@k- KtUK@R- M@RVVc
'
Unique Paths II
Minimum Path Sum,
10.3
13.8
179
10.3 Unique Paths II
10.3 Unique Paths II
Follow up for Unique Paths:
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1 and 0 respectively in the grid.
For example,
(
There is one obstacle in the middle of a 3 3 grid as illustrated below.
(y-y-y)(y-R-y)(y-y-y)
The total number of unique paths is 2.
Note: m and n will be at most 100.
10.3.1
ff G22i*Q/2- lMB[m2 Si?b AA
ff
Y
+Hbb aQHmiBQM &
Tm#HB+,
BMi mMB[m2Si?bqBi?P#bi+H2bU+QMbi p2+iQ`Ip2+iQ`IBMi= = Q#bi+H2:`B/V &
+QMbi BMi K 4 Q#bi+H2:`B/XbBx2UVc
+QMbi BMi M 4 Q#bi+H2:`B/(y)XbBx2UVc
B7 UQ#bi+H2:`B/(y)(y) %% Q#bi+H2:`B/(K @ R)(M @ R)V `2im`M yc
7 4 p2+iQ`Ip2+iQ`IBMi= =UK- p2+iQ`IBMi=UM- yVVc
7(y)(y) 4 Q#bi+H2:`B/(y)(y) \ y , Rc
`2im`M /7bUQ#bi+H2:`B/- K @ R- M @ RVc
'
T`Bpi2,
p2+iQ`Ip2+iQ`IBMi= = 7c
ff
ff !`2im`M
Uy- yV
Ut- vV
BMi /7bU+QMbi p2+iQ`Ip2+iQ`IBMi= = Q#bi+H2:`B/BMi t- BMi vV &
B7 Ut I y %% v I yV `2im`M yc ff
ff Ut-vV
B7 UQ#bi+H2:`B/(t)(v)V `2im`M yc
B7 Ut 44 y M/ v 44 yV `2im`M 7(y)(y)c ff
180
10
'c
'
B7 U7(t)(v) = yV &
`2im`M 7(t)(v)c
' 2Hb2 &
`2im`M 7(t)(v) 4 /7bUQ#bi+H2:`B/- t @ R- vV Y
/7bUQ#bi+H2:`B/- t- v @ RVc
'
10.3.2
ff G22i*Q/2- lMB[m2 Si?b AA
ff
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi mMB[m2Si?bqBi?P#bi+H2bUp2+iQ`Ip2+iQ`IBMi= = Q#bi+H2:`B/V &
+QMbi BMi K 4 Q#bi+H2:`B/XbBx2UVc
+QMbi BMi M 4 Q#bi+H2:`B/(y)XbBx2UVc
B7 UQ#bi+H2:`B/(y)(y) %% Q#bi+H2:`B/(K@R)(M@R)V `2im`M yc
p2+iQ`IBMi= 7UM- yVc
7(y) 4 Q#bi+H2:`B/(y)(y) \ y , Rc
7Q` UBMi B 4 yc B I Kc BYYV &
7(y) 4 7(y) 44 y \ y , UQ#bi+H2:`B/(B)(y) \ y , RVc
7Q` UBMi D 4 Rc D I Mc DYYV
7(D) 4 Q#bi+H2:`B/(B)(D) \ y , U7(D) Y 7(D @ R)Vc
'
'c
'
`2im`M 7(M @ R)c
Unique Paths
10.2
Minimum Path Sum,
13.8
181
10.4 N-Queens
10.4 N-Queens
The n-queens puzzle is the problem of placing n queens on an n n chessboard such that no two queens
attack each other.
10-2 Eight Queens
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens placement, where ^Z^ and ^X^
both indicate a queen and an empty space respectively.
For example, There exist two distinct solutions to the 4-queens puzzle:
(
(]XZXX]- ff aQHmiBQM R
]XXXZ]]ZXXX]]XXZX])(]XXZX]]ZXXX]]XXXZ]]XZXX])
ff aQHmiBQM k
182
10
p2+iQ`IBMi= *UM- yV, *(B)
1
ff G22i*Q/2- L@Zm22Mb
ff
Y
ff
PUM5 MV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`Ibi`BM;= = bQHp2LZm22MbUBMi MV &
p2+iQ`Ip2+iQ`Ibi`BM;= = `2bmHic
p2+iQ`IBMi= *UM- @RVc ff *(B)
B
/7bU*- `2bmHi- yVc
`2im`M `2bmHic
'
T`Bpi2,
pQB/ /7bUp2+iQ`IBMi= *- p2+iQ`Ip2+iQ`Ibi`BM;= = `2bmHi- BMi `QrV &
+QMbi BMi L 4 *XbBx2UVc
B7 U`Qr 44 LV & ff
p2+iQ`Ibi`BM;= bQHmiBQMc
7Q` UBMi B 4 yc B I Lc YYBV &
bi`BM; bUL- ^X^Vc
7Q` UBMi D 4 yc D I Lc YYDV &
B7 UD 44 *(B)V b(D) 4 ^Z^c
'
bQHmiBQMXTmb?n#+FUbVc
'
`2bmHiXTmb?n#+FUbQHmiBQMVc
`2im`Mc
'
'
f
7Q` UBMi D 4 yc D I Lc YYDV & ff
+QMbi #QQH QF 4 BboHB/U*- `Qr- DVc
B7 U5QFV +QMiBMm2c ff
ff
*(`Qr) 4 Dc
/7bU*- `2bmHi- `Qr Y RVc
ff
ff *(`Qr) 4 @Rc
'
U`Qr- +QHV
!T`K *
!T`K `Qr
!T`K +QH
!`2im`M
f
#QQH BboHB/U+QMbi p2+iQ`IBMi= *- BMi `Qr- BMi +QHV &
(i, C[i])
183
10.4 N-Queens
'c
'
7Q` UBMi B 4 yc B I `Qrc YYBV &
ff
B7 U*(B) 44 +QHV `2im`M 7Hb2c
ff
B7 U#bUB @ `QrV 44 #bU*(B) @ +QHVV `2im`M 7Hb2c
'
`2im`M i`m2c
2
ff G22i*Q/2- L@Zm22Mb
ff
Y
ff
PUM5V
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`Ibi`BM;= = bQHp2LZm22MbUBMi MV &
i?Bb@=+QHmKMb 4 p2+iQ`I#QQH=UM- 7Hb2Vc
i?Bb@=KBMn/B; 4 p2+iQ`I#QQH=Uk
M @ R- 7Hb2Vc
i?Bb@=MiBn/B; 4 p2+iQ`I#QQH=Uk
M @ R- 7Hb2Vc
p2+iQ`Ip2+iQ`Ibi`BM;= = `2bmHic
p2+iQ`IBMi= *UM- @RVc ff *(B)
/7bU*- `2bmHi- yVc
`2im`M `2bmHic
'
T`Bpi2,
ff
p2+iQ`I#QQH= +QHmKMbc ff
p2+iQ`I#QQH= KBMn/B;c ff
p2+iQ`I#QQH= MiBn/B;c ff
pQB/ /7bUp2+iQ`IBMi= *- p2+iQ`Ip2+iQ`Ibi`BM;= = `2bmHi- BMi `QrV &
+QMbi BMi L 4 *XbBx2UVc
B7 U`Qr 44 LV & ff
p2+iQ`Ibi`BM;= bQHmiBQMc
7Q` UBMi B 4 yc B I Lc YYBV &
bi`BM; bUL- ^X^Vc
7Q` UBMi D 4 yc D I Lc YYDV &
B7 UD 44 *(B)V b(D) 4 ^Z^c
'
bQHmiBQMXTmb?n#+FUbVc
'
`2bmHiXTmb?n#+FUbQHmiBQMVc
`2im`Mc
'
7Q` UBMi D 4 yc D I Lc YYDV & ff
+QMbi #QQH QF 4 5+QHmKMb(D) 5KBMn/B;(`Qr @ D Y L @ R)
5MiBn/B;(`Qr Y D)c
B7 U5QFV +QMiBMm2c ff
ff
184
10
'c
'
*(`Qr) 4 Dc
+QHmKMb(D) 4 KBMn/B;(`Qr @ D Y L @ R) 4 MiBn/B;(`Qr Y D) 4 i`m2c
/7bU*- `2bmHi- `Qr Y RVc
ff
ff *(`Qr) 4 @Rc
+QHmKMb(D) 4 KBMn/B;(`Qr @ D Y L @ R) 4 MiBn/B;(`Qr Y D) 4 7Hb2c
'
N-Queens II
10.5
10.5 N-Queens II
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
1
ff G22i*Q/2- L@Zm22Mb AA
ff
Y
ff
PUM5 MV
+Hbb aQHmiBQM &
Tm#HB+,
BMi iQiHLZm22MbUBMi MV &
i?Bb@=+QmMi 4 yc
p2+iQ`IBMi= *UM- yVc
/7bU*- yVc
`2im`M i?Bb@=+QmMic
PUMV
ff *(B)
'
T`Bpi2,
BMi +QmMic ff
pQB/ /7bUp2+iQ`IBMi= *- BMi `QrV &
+QMbi BMi L 4 *XbBx2UVc
B7 U`Qr 44 LV & ff
YYi?Bb@=+QmMic
`2im`Mc
185
10.5 N-Queens II
'
'
f
'c
7Q` UBMi D 4 yc D I Lc YYDV & ff
+QMbi #QQH QF 4 BboHB/U*- `Qr- DVc
B7 U5QFV +QMiBMm2c ff
ff
*(`Qr) 4 Dc
/7bU*- `Qr Y RVc
ff
ff *(`Qr) 4 @Rc
'
U`Qr- +QHV
!T`K *
!T`K `Qr
!T`K +QH
!`2im`M
f
#QQH BboHB/U+QMbi p2+iQ`IBMi= *- BMi `Qr- BMi +QHV &
7Q` UBMi B 4 yc B I `Qrc YYBV &
ff
B7 U*(B) 44 +QHV `2im`M 7Hb2c
ff
B7 U#bUB @ `QrV 44 #bU*(B) @ +QHVV `2im`M 7Hb2c
'
`2im`M i`m2c
'
2
ff G22i*Q/2- L@Zm22Mb AA
ff
Y
ff
PUM5V
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi iQiHLZm22MbUBMi MV &
i?Bb@=+QmMi 4 yc
i?Bb@=+QHmKMb 4 p2+iQ`I#QQH=UM- 7Hb2Vc
i?Bb@=KBMn/B; 4 p2+iQ`I#QQH=Uk
M @ R- 7Hb2Vc
i?Bb@=MiBn/B; 4 p2+iQ`I#QQH=Uk
M @ R- 7Hb2Vc
p2+iQ`IBMi= *UM- yVc
/7bU*- yVc
`2im`M i?Bb@=+QmMic
ff *(B)
'
T`Bpi2,
BMi +QmMic ff
ff
p2+iQ`I#QQH= +QHmKMbc ff
p2+iQ`I#QQH= KBMn/B;c ff
186
10
p2+iQ`I#QQH= MiBn/B;c
ff
pQB/ /7bUp2+iQ`IBMi= *- BMi `QrV &
+QMbi BMi L 4 *XbBx2UVc
B7 U`Qr 44 LV & ff
YYi?Bb@=+QmMic
`2im`Mc
'
'c
'
7Q` UBMi D 4 yc D I Lc YYDV & ff
+QMbi #QQH QF 4 5+QHmKMb(D)
5KBMn/B;(`Qr @ D Y L)
5MiBn/B;(`Qr Y D)c
B7 U5QFV +QMiBMm2c ff
ff
*(`Qr) 4 Dc
+QHmKMb(D) 4 KBMn/B;(`Qr @ D Y L) 4
MiBn/B;(`Qr Y D) 4 i`m2c
/7bU*- `Qr Y RVc
ff
ff *(`Qr) 4 @Rc
+QHmKMb(D) 4 KBMn/B;(`Qr @ D Y L) 4
MiBn/B;(`Qr Y D) 4 7Hb2c
'
N-Queens
10.4
10.6 Restore IP Addresses
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example: Given ]k88k88RRRj8],
return (]k88Xk88XRRXRj8]- ]k88Xk88XRRRXj8]). (Order does not matter)
ff G22i*Q/2- _2biQ`2 AS //`2bb2b
ff
PUM9V
PUMV
+Hbb aQHmiBQM &
187
10.6 Restore IP Addresses
Tm#HB+,
p2+iQ`Ibi`BM;= `2biQ`2AT//`2bb2bU+QMbi bi`BM; bV &
p2+iQ`Ibi`BM;= `2bmHic
p2+iQ`Ibi`BM;= BTc ff
/7bUb- BT- `2bmHi- yVc
`2im`M `2bmHic
'
f
!#`B27
!T`K(BM) b
!T`K(Qmi) BT
!T`K(Qmi) `2bmHi
AS
!T`K(BM) bi`i
BM/2t
!`2im`M
f
pQB/ /7bUbi`BM; b- p2+iQ`Ibi`BM;= BT- p2+iQ`Ibi`BM;= `2bmHibBx2ni bi`iV &
B7 UBTXbBx2UV 44 9 bi`i 44 bXbBx2UVV & ff
`2bmHiXTmb?n#+FUBT(y) Y ^X^ Y BT(R) Y ^X^ Y BT(k) Y ^X^ Y BT(j)Vc
`2im`Mc
'
B7 UbXbBx2UV
`2im`Mc
B7 UbXbBx2UV
`2im`Mc
@ bi`i = U9 @ BTXbBx2UVV
ff
@ bi`i I U9 @ BTXbBx2UVVV
ff
jV
BMi MmK 4 yc
7Q` UbBx2ni B 4 bi`ic B I bi`i Y jc BYYV &
MmK 4 MmK
Ry Y Ub(B) @ ^y^Vc
B7 UMmK I y %% MmK = k88V +QMiBMm2c
ff
BTXTmb?n#+FUbXbm#bi`Ubi`i- B @ bi`i Y RVVc
/7bUb- BT- `2bmHi- B Y RVc
BTXTQTn#+FUVc
'c
'
'
B7 UMmK 44 yV #`2Fc
ff
188
10
10.7 Combination Sum
Given a set of candidate numbers (C) and a target number (T ), find all unique combinations in C where
the candidate numbers sums to T .
The same repeated number may be chosen from C unlimited number of times.
Note:
All numbers (including target) will be positive integers.
Elements in a combination (a1 , a2 , ..., ak ) must be in non-descending order. (ie, a1 a2 ... ak ).
The solution set must not contain duplicate combinations.
For example, given candidate set k-j-e-d and target d, A solution set is:
(d)
(k- k- j)
ff G22i*Q/2- *QK#BMiBQM amK
ff
PUM5V
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = +QK#BMiBQMamKUp2+iQ`IBMi= MmKb- BMi i`;2iV &
bQ`iUMmKbX#2;BMUV- MmKbX2M/UVVc
p2+iQ`Ip2+iQ`IBMi= = `2bmHic ff
p2+iQ`IBMi= Ti?c ff
/7bUMmKb- Ti?- `2bmHi- i`;2i- yVc
`2im`M `2bmHic
'
T`Bpi2,
pQB/ /7bUp2+iQ`IBMi= MmKb- p2+iQ`IBMi= Ti?- p2+iQ`Ip2+iQ`IBMi= = `2bmHiBMi ;T- BMi bi`iV &
B7 U;T 44 yV & ff
`2bmHiXTmb?n#+FUTi?Vc
`2im`Mc
'
7Q` UbBx2ni B 4 bi`ic B I MmKbXbBx2UVc BYYV & ff
B7 U;T I MmKb(B)V `2im`Mc ff
'
Ti?XTmb?n#+FUMmKb(B)Vc ff
/7bUMmKb- Ti?- `2bmHi- ;T @ MmKb(B)- BVc
Ti?XTQTn#+FUVc ff
189
10.8 Combination Sum II
'
'c
Combination Sum II
10.8
10.8 Combination Sum II
Given a collection of candidate numbers (C) and a target number (T ), find all unique combinations in
C where the candidate numbers sums to T .
Each number in C may only be used once in the combination.
Note:
All numbers (including target) will be positive integers.
Elements in a combination (a1 , a2 , ..., ak ) must be in non-descending order. (ie, a1 > a2 > ... > ak ).
The solution set must not contain duplicate combinations.
For example, given candidate set Ry-R-k-d-e-R-8 and target 3, A solution set is:
(R(R(k(R-
d)
k- 8)
e)
R- e)
ff G22i*Q/2- *QK#BMiBQM amK AA
ff
PUM5V
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = +QK#BMiBQMamKkUp2+iQ`IBMi= MmKb- BMi i`;2iV &
bQ`iUMmKbX#2;BMUV- MmKbX2M/UVVc ff
8y
ff
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
p2+iQ`IBMi= Ti?c
/7bUMmKb- Ti?- `2bmHi- i`;2i- yVc
`2im`M `2bmHic
'
T`Bpi2,
ff
MmKb(bi`i- MmKbXbBx2UVV
190
10
biiB+ pQB/ /7bU+QMbi p2+iQ`IBMi= MmKb- p2+iQ`IBMi= Ti?p2+iQ`Ip2+iQ`IBMi= = `2bmHi- BMi ;T- BMi bi`iV &
B7 U;T 44 yV & ff
`2bmHiXTmb?n#+FUTi?Vc
`2im`Mc
'
BMi T`2pBQmb 4 @Rc
7Q` UbBx2ni B 4 bi`ic B I MmKbXbBx2UVc BYYV &
ff
MmKb(B)
ff
MmKb(B)
B7 UT`2pBQmb 44 MmKb(B)V +QMiBMm2c
B7 U;T I MmKb(B)V `2im`Mc
MmKb(B)
ff
T`2pBQmb 4 MmKb(B)c
'c
'
'
Ti?XTmb?n#+FUMmKb(B)Vc
/7bUMmKb- Ti?- `2bmHi- ;T @ MmKb(B)- B Y RVc
Ti?XTQTn#+FUVc ff
Combination Sum
10.7
10.9 Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
]UUUVVV]- ]UUVUVV]- ]UUVVUV]- ]UVUUVV]- ]UVUVUV]
<n
1
ff G22i*Q/2- :2M2`i2 S`2Mi?2b2b
ff
PUhP.PV
PUMV
+Hbb aQHmiBQM &
191
10.9 Generate Parentheses
Tm#HB+,
p2+iQ`Ibi`BM;= ;2M2`i2S`2Mi?2bBbUBMi MV &
p2+iQ`Ibi`BM;= `2bmHic
bi`BM; Ti?c
B7 UM = yV ;2M2`i2UM- Ti?- `2bmHi- y- yVc
`2im`M `2bmHic
'
ff H
U
- `
V
pQB/ ;2M2`i2UBMi M- bi`BM; Ti?- p2+iQ`Ibi`BM;= `2bmHi- BMi H- BMi `V &
B7 UH 44 MV &
bi`BM; bUTi?Vc
`2bmHiXTmb?n#+FUbXTT2M/UM @ `- ^V^VVc
`2im`Mc
'
Ti?XTmb?n#+FU^U^Vc
;2M2`i2UM- Ti?- `2bmHi- H Y R- `Vc
Ti?XTQTn#+FUVc
'c
'
B7 UH = `V &
Ti?XTmb?n#+FU^V^Vc
;2M2`i2UM- Ti?- `2bmHi- H- ` Y RVc
Ti?XTQTn#+FUVc
'
2
ff G22i*Q/2- :2M2`i2 S`2Mi?2b2b
ff !mi?Q`
U?iiT,ffr2B#QX+QKfHBM+?2M;xDmV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ibi`BM;= ;2M2`i2S`2Mi?2bBb UBMi MV &
B7 UM 44 yV `2im`M p2+iQ`Ibi`BM;=UR- ]]Vc
B7 UM 44 RV `2im`M p2+iQ`Ibi`BM;= UR- ]UV]Vc
p2+iQ`Ibi`BM;= `2bmHic
7Q` UBMi B 4 yc B I Mc YYBV
7Q` UmiQ BMM2` , ;2M2`i2S`2Mi?2bBb UBVV
7Q` UmiQ Qmi2` , ;2M2`i2S`2Mi?2bBb UM @ R @ BVV
`2bmHiXTmb?n#+F U]U] Y BMM2` Y ]V] Y Qmi2`Vc
'c
'
`2im`M `2bmHic
Valid Parentheses,
4.1.1
192
10
Longest Valid Parentheses,
4.1.2
10.10 Sudoku Solver
Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character ^X^.
You may assume that there will be only one unique solution.
10-3 A sudoku puzzle...
10-4 ...and its solution numbers marked in red
193
10.11 Word Search
ff G22i*Q/2- am/QFm aQHp2`
ff
PUN9V
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH bQHp2am/QFmUp2+iQ`Ip2+iQ`I+?`= = #Q`/V &
7Q` UBMi B 4 yc B I Nc YYBV
7Q` UBMi D 4 yc D I Nc YYDV &
B7 U#Q`/(B)(D) 44 ^X^V &
7Q` UBMi F 4 yc F I Nc YYFV &
#Q`/(B)(D) 4 ^R^ Y Fc
B7 UBboHB/U#Q`/- B- DV bQHp2am/QFmU#Q`/VV
`2im`M i`m2c
#Q`/(B)(D) 4 ^X^c
'
`2im`M 7Hb2c
'
'
`2im`M i`m2c
'
T`Bpi2,
ff
Ut- vV
#QQH BboHB/U+QMbi p2+iQ`Ip2+iQ`I+?`= = #Q`/- BMi t- BMi vV &
BMi B- Dc
7Q` UB 4 yc B I Nc BYYV ff
v
B7 UB 54 t #Q`/(B)(v) 44 #Q`/(t)(v)V
`2im`M 7Hb2c
7Q` UD 4 yc D I Nc DYYV ff
t
B7 UD 54 v #Q`/(t)(D) 44 #Q`/(t)(v)V
`2im`M 7Hb2c
7Q` UB 4 j
Ut f jVc B I j
Ut f j Y RVc BYYV
7Q` UD 4 j
Uv f jVc D I j
Uv f j Y RVc DYYV
B7 UUB 54 t %% D 54 vV #Q`/(B)(D) 44 #Q`/(t)(v)V
`2im`M 7Hb2c
`2im`M i`m2c
'
'c
Valid Sudoku,
2.1.14
10.11 Word Search
Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where ]/D+2Mi] cells are those
horizontally or vertically neighbouring. The same letter cell may not be used more than once.
194
10
For example, Given board =
(]"*1])(]a6*a])(].11])
word = ]"**1.], -> returns i`m2,
word = ]a11], -> returns i`m2,
word = ]"*"], -> returns 7Hb2.
ff G22i*Q/2- qQ`/ a2`+?
ff
ff
PUMk KkV
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH 2tBbiU+QMbi p2+iQ`Ip2+iQ`I+?`= = #Q`/- +QMbi bi`BM; rQ`/V &
+QMbi BMi K 4 #Q`/XbBx2UVc
+QMbi BMi M 4 #Q`/(y)XbBx2UVc
p2+iQ`Ip2+iQ`I#QQH= = pBbBi2/UK- p2+iQ`I#QQH=UM- 7Hb2VVc
7Q` UBMi B 4 yc B I Kc YYBV
7Q` UBMi D 4 yc D I Mc YYDV
B7 U/7bU#Q`/- rQ`/- y- B- D- pBbBi2/VV
`2im`M i`m2c
`2im`M 7Hb2c
'
T`Bpi2,
biiB+ #QQH /7bU+QMbi p2+iQ`Ip2+iQ`I+?`= = #Q`/- +QMbi bi`BM; rQ`/BMi BM/2t- BMi t- BMi v- p2+iQ`Ip2+iQ`I#QQH= = pBbBi2/V &
B7 UBM/2t 44 rQ`/XbBx2UVV
`2im`M i`m2c ff
B7 Ut I y %% v I y %% t =4 #Q`/XbBx2UV %% v =4 #Q`/(y)XbBx2UVV
`2im`M 7Hb2c ff
B7 UpBbBi2/(t)(v)V `2im`M 7Hb2c ff
B7 U#Q`/(t)(v) 54 rQ`/(BM/2t)V `2im`M 7Hb2c ff
pBbBi2/(t)(v) 4 i`m2c
#QQH `2i 4 /7bU#Q`/- rQ`/- BM/2t Y
/7bU#Q`/- rQ`/- BM/2t Y R/7bU#Q`/- rQ`/- BM/2t Y R/7bU#Q`/- rQ`/- BM/2t Y RpBbBi2/(t)(v) 4 7Hb2c
R- t @
t Y Rt- v @
t- v Y
RvRR-
v- pBbBi2/V %% ff
pBbBi2/V
%% ff
pBbBi2/V
%% ff
pBbBi2/Vc
ff
195
10.12
'c
'
`2im`M `2ic
10.12
10.12.1
10.12.2
1.
(a)
Ti?()
(b)
2.
3.
bi`m+i
bi`m+i
4.
196
10
5.
0
6.
Ti?()
7.
(a)
DAG
BFS
BFS
DAG
(b)
9.4
DAG
8
8.
(a)
(b)
i.
DAG
DAG=>
=>
ii.
HashMap
C++
KT
HashMap
mMQ`/2`2/nKT
C++ 11
KT
197
10.12
10.12.3
dfs_template.cpp
/7b
X
!T`K(BM) BMTmi
!T`K(Qmi) Ti?
!T`K(Qmi) `2bmHi
!T`K(BMQmi) +m` Q` ;T
!`2im`M
f
pQB/ /7bUivT2 BMTmi- ivT2 Ti?- ivT2 `2bmHi- BMi +m` Q` ;TV &
B7 U
V `2im`M yc
ff
B7 U+m` 44 BMTmiXbBx2UVV & ff
ff B7 U;T 44 yV &
Ti?
`2bmHi
'
B7 U
V `2im`Mc
7Q`UXXXV & ff
'
'
Ti?
/7bUBMTmi- bi2T Y R Q` ;T@@- `2bmHiVc
Ti?
dfs_template.cpp
10.12.4
(Depth-first search, DFS)
http://en.wikipedia.org/wiki/Depth_rst_search
http://en.wikipedia.org/wiki/Backtracking
ing)
=
+
(recursion)
10.12.5
(recursion)
(iteration)
(prunning)
(backtrack-
198
10
+
memorization
memorization
Donald Michie
top-down with cache
??
1968
top-down
memorization
rization
(iterative)
memorization
memorization
memorization
memo-
11
11.1 Pow(x,n)
Implement pow(x, n).
xn = xn/2 xn/2 xn%2
ffG22i*Q/2- SQrUt- MV
ff
0tM 4 t&Mfk'
t&Mfk'
t&M$Wk'0
ff
PUHQ;MV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
/Qm#H2 KvSQrU/Qm#H2 t- BMi MV &
B7 UM I yV `2im`M RXy f TQr2`Ut- @MVc
2Hb2 `2im`M TQr2`Ut- MVc
'
T`Bpi2,
/Qm#H2 TQr2`U/Qm#H2 t- BMi MV &
B7 UM 44 yV `2im`M Rc
/Qm#H2 p 4 TQr2`Ut- M f kVc
B7 UM W k 44 yV `2im`M p
pc
2Hb2 `2im`M p
p
tc
'
'c
Sqrt(x)
11.2
199
200
11
11.2 Sqrt(x)
Implement int b[`iUBMi tV.
Compute and return the square root of t.
ff G22i*Q/2- a[`iUtV
ff
ff
PUHQ;MV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi Kva[`iUBMi tV &
BMi H27i 4 R- `B;?i 4 t f kc
BMi HbinKB/c ff
KB/
B7 Ut I kV `2im`M tc
'c
'
r?BH2UH27i I4 `B;?iV &
+QMbi BMi KB/ 4 H27i Y U`B;?i @ H27iV f kc
B7Ut f KB/ = KB/V & ff
t = KB/
KB/
H27i 4 KB/ Y Rc
HbinKB/ 4 KB/c
' 2Hb2 B7Ut f KB/ I KB/V &
`B;?i 4 KB/ @ Rc
' 2Hb2 &
`2im`M KB/c
'
'
`2im`M HbinKB/c
Pow(x)
11.1
12
12.1 Jump Game
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
4 (k-j-R-R-9), return true.
4 (j-k-R-y-9), return false.
(B)
0
0
7(B)
f [i] = max(f [i 1], A[i 1]) 1, i > 0
1
ff G22i*Q/2- CmKT :K2
ff
R
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH +MCmKTU+QMbi p2+iQ`IBMi= MmKbV &
BMi `2+? 4 Rc ff
7Q` UBMi B 4 yc B I `2+? `2+? I MmKbXbBx2UVc YYBV
`2+? 4 KtU`2+?- B Y R Y MmKb(B)Vc
201
(B)
202
12
'c
'
`2im`M `2+? =4 MmKbXbBx2UVc
2
ff G22i*Q/2- CmKT :K2
ff
k
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH +MCmKT U+QMbi p2+iQ`IBMi= MmKbV &
B7 UMmKbX2KTivUVV `2im`M i`m2c
ff
BMi H27inKQbi 4 MmKbXbBx2UV @ Rc
7Q` UBMi B 4 MmKbXbBx2UV @ kc B =4 yc @@BV
B7 UB Y MmKb(B) =4 H27inKQbiV
H27inKQbi 4 Bc
'c
'
`2im`M H27inKQbi 44 yc
3
ff G22i*Q/2- CmKT :K2
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH +MCmKTU+QMbi p2+iQ`IBMi= MmKbV &
p2+iQ`IBMi= 7UMmKbXbBx2UV- yVc
7(y) 4 yc
7Q` UBMi B 4 Rc B I MmKbXbBx2UVc BYYV &
7(B) 4 KtU7(B @ R)- MmKb(B @ R)V @ Rc
B7 U7(B) I yV `2im`M 7Hb2cc
'
`2im`M 7(MmKbXbBx2UV @ R) =4 yc
'
'c
Jump Game II
12.2
12.2 Jump Game II
Given an array of non-negative integers, you are initially positioned at the first index of the array.
12.2 Jump Game II
203
Each element in the array represents your maximum jump length at that position.
Your goal is to reach the last index in the minimum number of jumps.
For example: Given array 4 (k-j-R-R-9)
The minimum number of jumps to reach the last index is 2. (Jump 1 step from index 0 to 1, then 3 steps
to the last index.)
1
ff G22i*Q/2- CmKT :K2 AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi DmKTU+QMbi p2+iQ`IBMi= MmKbV &
BMi bi2T 4 yc ff
BMi H27i 4 yc
BMi `B;?i 4 yc ff (H27i- `B;?i)
B7 UMmKbXbBx2UV 44 RV `2im`M yc
r?BH2 UH27i I4 `B;?iV & ff
YYbi2Tc
+QMbi BMi QH/n`B;?i 4 `B;?ic
7Q` UBMi B 4 H27ic B I4 QH/n`B;?ic YYBV &
BMi M2rn`B;?i 4 B Y MmKb(B)c
B7 UM2rn`B;?i =4 MmKbXbBx2UV @ RV `2im`M bi2Tc
B7 UM2rn`B;?i = `B;?iV `B;?i 4 M2rn`B;?ic
'
H27i 4 QH/n`B;?i Y Rc
'c
'
'
`2im`M yc
2
ff G22i*Q/2- CmKT :K2 AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi DmKTU+QMbi p2+iQ`IBMi= MmKbV &
BMi `2bmHi 4 yc
ff i?2 KtBKmK /BbiM+2 i?i ?b #22M `2+?2/
BMi Hbi 4 yc
ff i?2 KtBKmK /BbiM+2 i?i +M #2 `2+?2/ #v mbBM; ]`2iYR] bi2Tb
BMi +m` 4 yc
204
12
7Q` UBMi B 4 yc B I MmKbXbBx2UVc YYBV &
B7 UB = HbiV &
Hbi 4 +m`c
YY`2bmHic
'
+m` 4 KtU+m`- B Y MmKb(B)Vc
'
'c
'
`2im`M `2bmHic
Jump Game
12.1
12.3 Best Time to Buy and Sell Stock
Say you have an array for which the i-th element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the
stock), design an algorithm to find the maximum profit.
ff G22i*Q/2- "2bi hBK2 iQ "mv M/ a2HH aiQ+F
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KtS`Q7BiUp2+iQ`IBMi= T`B+2bV &
B7 UT`B+2bXbBx2UV I kV `2im`M yc
BMi T`Q7Bi 4 yc ff
BMi +m`nKBM 4 T`B+2b(y)c ff
'c
'
7Q` UBMi B 4 Rc B I T`B+2bXbBx2UVc BYYV &
T`Q7Bi 4 KtUT`Q7Bi- T`B+2b(B) @ +m`nKBMVc
+m`nKBM 4 KBMU+m`nKBM- T`B+2b(B)Vc
'
`2im`M T`Q7Bic
m=1
205
12.4 Best Time to Buy and Sell Stock II
Best Time to Buy and Sell Stock II
12.4
Best Time to Buy and Sell Stock III
13.5
12.4 Best Time to Buy and Sell Stock II
Say you have an array for which the i-th element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie,
buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions
at the same time (ie, you must sell the stock before you buy again).
ff G22i*Q/2- "2bi hBK2 iQ "mv M/ a2HH aiQ+F AA
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KtS`Q7BiUp2+iQ`IBMi= T`B+2bV &
BMi bmK 4 yc
7Q` UBMi B 4 Rc B I T`B+2bXbBx2UVc BYYV &
BMi /B77 4 T`B+2b(B) @ T`B+2b(B @ R)c
B7 U/B77 = yV bmK Y4 /B77c
'
`2im`M bmKc
'
'c
Best Time to Buy and Sell Stock
Best Time to Buy and Sell Stock III
12.3
13.5
m=
206
12
12.5 Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, the
longest substring without repeating letters for ]#+#+##] is ]#+], which the length is 3. For ]#####] the
longest substring is ]#], with the length of 1.
BM/2tYR
12-1
O(n)
12-1
ff G22i*Q/2- GQM;2bi am#bi`BM; qBi?Qmi _2T2iBM; *?`+i2`b
ff
PUMV
PURV
ff
+Hbb aQHmiBQM &
Tm#HB+,
BMi H2M;i?P7GQM;2biam#bi`BM;Ubi`BM; bV &
+QMbi BMi a*AAnJs 4 k88c
BMi Hbi(a*AAnJs)c ff
BMi bi`i 4 yc ff
7BHHUHbi- Hbi Y a*AAnJs- @RVc ff y
BMi KtnH2M 4 yc
7Q` UBMi B 4 yc B I bXbBx2UVc BYYV &
B7 UHbi(b(B)) =4 bi`iV &
KtnH2M 4 KtUB @ bi`i- KtnH2MVc
bi`i 4 Hbi(b(B)) Y Rc
'
Hbi(b(B)) 4 Bc
'
@R
207
12.6 Container With Most Water
'
'c
`2im`M KtUUBMiVbXbBx2UV @ bi`i- KtnH2MVc
ff
]#+/]
12.6 Container With Most Water
Given n non-negative integers a1 , a2 , ..., an , where each represents a point at coordinate (i, ai ). n vertical lines are drawn such that the two endpoints of line i is at (i, ai ) and (i, 0). Find two lines, which together
with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container.
ff G22i*Q/2- *QMiBM2` qBi? JQbi qi2`
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi Kt`2Up2+iQ`IBMi= ?2B;?iV &
BMi bi`i 4 yc
BMi 2M/ 4 ?2B;?iXbBx2UV @ Rc
BMi `2bmHi 4 ALhnJALc
r?BH2 Ubi`i I 2M/V &
BMi `2 4 KBMU?2B;?i(2M/)- ?2B;?i(bi`i)V
`2bmHi 4 KtU`2bmHi- `2Vc
B7 U?2B;?i(bi`i) I4 ?2B;?i(2M/)V &
bi`iYYc
' 2Hb2 &
2M/@@c
'
'
`2im`M `2bmHic
'
'c
Trapping Rain Water,
2.1.15
U2M/ @ bi`iVc
208
12
Largest Rectangle in Histogram,
4.1.3
13
13.1 Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent
numbers on the row below.
For example, given the following triangle
(
(k)(j-9)(e-8-d)(9-R-3-j)
The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).
Note: Bonus point if you are able to do this using only O(n) extra space, where n is the total number of
rows in the triangle.
f (i, j)
(i, j)
f (i, j) = min {f (i + 1, j), f (i + 1, j + 1)} + (i, j)
ff G22i*Q/2- h`BM;H2
ff
PUMkV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KBMBKmKhQiH Up2+iQ`Ip2+iQ`IBMi== i`BM;H2V &
7Q` UBMi B 4 i`BM;H2XbBx2UV @ kc B =4 yc @@BV
7Q` UBMi D 4 yc D I B Y Rc YYDV
i`BM;H2(B)(D) Y4 KBMUi`BM;H2(B Y R)(D)i`BM;H2(B Y R)(D Y R)Vc
209
210
13
'
'c
`2im`M i`BM;H2 (y)(y)c
13.2 Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array (k-R-j-9-R-k-R-8-9), the contiguous subarray (9-R-k-R) has
the largest bmK 4 e.
SubArray
2.
SubArray
SubArray
SubArray
SubArray
SubArray
7(D)
a(D)
f [j]
max {f [j 1] + S[j], S[j]} ,
target
max {f [j]} ,
1jn
1jn
S[j]
f [j 1] +
S[j]
S[j]
S[j]
i
S[j]
O(n3 )
O(n2 )
O(n log n)
2O(n2 )
M=1
O(n)
M
211
13.2 Maximum Subarray
ff G22i*Q/2- JtBKmK am#``v
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi Ktam#``vUp2+iQ`IBMi= MmKbV &
BMi `2bmHi 4 ALhnJAL- 7 4 yc
7Q` UBMi B 4 yc B I MmKbXbBx2UVc YYBV &
7 4 KtU7 Y MmKb(B)- MmKb(B)Vc
`2bmHi 4 KtU`2bmHi- 7Vc
'
`2im`M `2bmHic
'
'c
5
ff G22i*Q/2- JtBKmK am#``v
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi Ktam#``vUp2+iQ`IBMi= V &
`2im`M K+bbUX#2;BMUV- X2M/UVVc
'
T`Bpi2,
ff
8
i2KTHi2 IivT2MK2 Ai2`=
biiB+ BMi K+bbUAi2` #2;BM- Ai2` 2M/V &
BMi `2bmHi- +m`nKBMc
+QMbi BMi M 4 /BbiM+2U#2;BM- 2M/Vc
BMi bmK 4 M2r BMi(M Y R)c ff
M
'c
'
bmK(y) 4 yc
`2bmHi 4 ALhnJALc
+m`nKBM 4 bmK(y)c
7Q` UBMi B 4 Rc B I4 Mc BYYV &
bmK(B) 4 bmK(B @ R) Y U#2;BM Y B @ RVc
'
7Q` UBMi B 4 Rc B I4 Mc BYYV &
`2bmHi 4 KtU`2bmHi- bmK(B) @ +m`nKBMVc
+m`nKBM 4 KBMU+m`nKBM- bmK(B)Vc
'
/2H2i2() bmKc
`2im`M `2bmHic
Binary Tree Maximum Path Sum
5.4.5
212
13
13.3 Palindrome Partitioning II
Given a string s, partition s such that every substring of the partition is a palindrome.
Return the minimum cuts needed for a palindrome partitioning of s.
For example, given b 4 ]#],
Return 1 since the palindrome partitioning (]]-]#]) could be produced using 1 cut.
7UB-DV
(B-D)
cut
f (i, j) = min {f (i, k) + f (k + 1, j)} , i k j, 0 i j < n
DP
7UBV4
(B- M@R)
DP
+mi
f (i) = min {f (j + 1) + 1} , i j < n
(B-D)
DP
S(B)(D) 4 i`m2 B7 (B-D)
S(B)(D) 4 bi`(B) 44 bi`(D) S(BYR)(D@R)
ff G22i*Q/2- SHBM/`QK2 S`iBiBQMBM; AA
ff
PUMkV
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KBM*miU+QMbi bi`BM; bV &
+QMbi BMi M 4 bXbBx2UVc
BMi 7(MYR)c
#QQH T(M)(M)c
7BHHnMUT(y)(y)- M
M- 7Hb2Vc
ffi?2 rQ`bi +b2 Bb +miiBM; #v 2+? +?`
7Q` UBMi B 4 yc B I4 Mc BYYV
7(B) 4 M @ R @ Bc ff
7(M)4@R
7Q` UBMi B 4 M @ Rc B =4 yc B@@V &
7Q` UBMi D 4 Bc D I Mc DYYV &
B7 Ub(B) 44 b(D) UD @ B I k %% T(B Y R)(D @ R)VV &
T(B)(D) 4 i`m2c
7(B) 4 KBMU7(B)- 7(D Y R) Y RVc
'
'
213
13.4 Maximal Rectangle
'c
'
'
`2im`M 7(y)c
Palindrome Partitioning
10.1
13.4 Maximal Rectangle
Given a 2D binary matrix filled with 0s and 1s, find the largest rectangle containing all ones and return
its area.
ff G22i*Q/2- JtBKH _2+iM;H2
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KtBKH_2+iM;H2Up2+iQ`Ip2+iQ`I+?`= = Ki`BtV &
B7 UKi`BtX2KTivUVV `2im`M yc
+QMbi BMi K
+QMbi BMi M
p2+iQ`IBMi=
p2+iQ`IBMi=
p2+iQ`IBMi=
4 Ki`BtXbBx2UVc
4 Ki`Bt(y)XbBx2UVc
>UM- yVc
GUM- yVc
_UM- MVc
BMi `2i 4 yc
7Q` UBMi B 4 yc B I Kc YYBV &
BMi H27i 4 y- `B;?i 4 Mc
ff +H+mHi2 GUB- DV 7`QK H27i iQ `B;?i
7Q` UBMi D 4 yc D I Mc YYDV &
B7 UKi`Bt(B)(D) 44 ^R^V &
YY>(D)c
G(D) 4 KtUG(D)- H27iVc
' 2Hb2 &
H27i 4 DYRc
>(D) 4 yc G(D) 4 yc _(D) 4 Mc
'
'
214
13
ff +H+mHi2 _UB- DV 7`QK `B;?i iQ H27i
7Q` UBMi D 4 M@Rc D =4 yc @@DV &
B7 UKi`Bt(B)(D) 44 ^R^V &
_(D) 4 KBMU_(D)- `B;?iVc
`2i 4 KtU`2i- >(D) U_(D)@G(D)VVc
' 2Hb2 &
`B;?i 4 Dc
'
'
'
'c
'
`2im`M `2ic
13.5 Best Time to Buy and Sell Stock III
Say you have an array for which the i-th element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete at most two transactions.
Note: You may not engage in multiple transactions at the same time (ie, you must sell the stock before
you buy again).
f (i)
[0, i](0 i n1)
[i, n1](0 i n1)
g(i)
max {f (i) + g(i)} , 0 i n 1
https://gist.github.com/soulmachine/5906637
ff G22i*Q/2- "2bi hBK2 iQ "mv M/ a2HH aiQ+F AAA
ff
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KtS`Q7BiUp2+iQ`IBMi= T`B+2bV &
B7 UT`B+2bXbBx2UV I kV `2im`M yc
+QMbi BMi M 4 T`B+2bXbBx2UVc
p2+iQ`IBMi= 7UM- yVc
215
13.6 Interleaving String
p2+iQ`IBMi= ;UM- yVc
7Q` UBMi B 4 R- pHH2v 4 T`B+2b(y)c B I Mc YYBV &
pHH2v 4 KBMUpHH2v- T`B+2b(B)Vc
7(B) 4 KtU7(B @ R)- T`B+2b(B) @ pHH2vVc
'
7Q` UBMi B 4 M @ k- T2F 4 T`B+2b(M @ R)c B =4 yc @@BV &
T2F 4 KtUT2F- T`B+2b(B)Vc
;(B) 4 KtU;(B)- T2F @ T`B+2b(B)Vc
'
BMi KtnT`Q7Bi 4 yc
7Q` UBMi B 4 yc B I Mc YYBV
KtnT`Q7Bi 4 KtUKtnT`Q7Bi- 7(B) Y ;(B)Vc
'c
'
`2im`M KtnT`Q7Bic
Best Time to Buy and Sell Stock
12.3
Best Time to Buy and Sell Stock II
12.4
13.6 Interleaving String
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example, Given: bR 4 ]#++]- bk 4 ]/##+],
When bj 4 ]/##+#++], return true.
When bj 4 ]/###+++], return false.
7(B)(D)
s3
bR(y-B)
bk(y-D)
7(B)(D)47(B@R)(D)
bj(y- BYD)
s2
7(B)(D)47(B)(D@R)
7(B)(D) 4 UbR(B @ R) 44 bj (B Y D @ R) 7(B @ R)(D)V
%% Ubk(D @ R) 44 bj (B Y D @ R) 7(B)(D @ R)Vc
ff G22i*Q/2- AMi2`H2pBM; ai`BM;
ff
s1
s3
216
13
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbAMi2`H2p2U+QMbi bi`BM; bR- +QMbi bi`BM; bk- +QMbi bi`BM; bjV &
B7 UbjXH2M;i?UV 54 bRXH2M;i?UV Y bkXH2M;i?UVV
`2im`M 7Hb2c
'
`2im`M BbAMi2`H2p2U#2;BMUbRV- 2M/UbRV- #2;BMUbkV- 2M/UbkV#2;BMUbjV- 2M/UbjVVc
i2KTHi2IivT2MK2 AMAi=
#QQH BbAMi2`H2p2UAMAi 7B`biR- AMAi HbiR- AMAi 7B`bik- AMAi HbikAMAi 7B`bij- AMAi HbijV &
B7 U7B`bij 44 HbijV
`2im`M 7B`biR 44 HbiR 7B`bik 44 Hbikc
'c
'
`2im`M U 7B`biR 44 7B`bij
BbAMi2`H2p2UM2tiU7B`biRV- HbiR- 7B`bik- HbikM2tiU7B`bijV- HbijVV
%% U 7B`bik 44 7B`bij
BbAMi2`H2p2U7B`biR- HbiR- M2tiU7B`bikV- HbikM2tiU7B`bijV- HbijVVc
ff G22i*Q/2- AMi2`H2pBM; ai`BM;
ff
PUMkV
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbAMi2`H2p2U+QMbi bi`BM; bR- +QMbi bi`BM; bk- +QMbi bi`BM; bjV &
B7 UbjXH2M;i?UV 54 bRXH2M;i?UV Y bkXH2M;i?UVV
`2im`M 7Hb2c
p2+iQ`Ip2+iQ`I#QQH== 7UbRXH2M;i?UV Y Rp2+iQ`I#QQH=UbkXH2M;i?UV Y R- i`m2VVc
7Q` UbBx2ni B 4 Rc B I4 bRXH2M;i?UVc YYBV
7(B)(y) 4 7(B @ R)(y) bR(B @ R) 44 bj(B @ R)c
7Q` UbBx2ni B 4 Rc B I4 bkXH2M;i?UVc YYBV
7(y)(B) 4 7(y)(B @ R) bk(B @ R) 44 bj(B @ R)c
7Q` UbBx2ni B 4 Rc B I4 bRXH2M;i?UVc YYBV
7Q` UbBx2ni D 4 Rc D I4 bkXH2M;i?UVc YYDV
7(B)(D) 4 UbR(B @ R) 44 bj(B Y D @ R) 7(B @ R)(D)V
%% Ubk(D @ R) 44 bj(B Y D @ R) 7(B)(D @ R)Vc
'c
'
`2im`M 7(bRXH2M;i?UV)(bkXH2M;i?UV)c
13.7 Scramble String
217
+
ff G22i*Q/2- AMi2`H2pBM; ai`BM;
ff
Y
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH BbAMi2`H2p2U+QMbi bi`BM; bR- +QMbi bi`BM; bk- +QMbi bi`BM; bjV &
B7 UbRXH2M;i?UV Y bkXH2M;i?UV 54 bjXH2M;i?UVV
`2im`M 7Hb2c
B7 UbRXH2M;i?UV I bkXH2M;i?UVV
`2im`M BbAMi2`H2p2Ubk- bR- bjVc
p2+iQ`I#QQH= 7UbkXH2M;i?UV Y R- i`m2Vc
7Q` UbBx2ni B 4 Rc B I4 bkXH2M;i?UVc YYBV
7(B) 4 bk(B @ R) 44 bj(B @ R) 7(B @ R)c
7Q` UbBx2ni B 4 Rc B I4 bRXH2M;i?UVc YYBV &
7(y) 4 bR(B @ R) 44 bj(B @ R) 7(y)c
'
'
'c
7Q` UbBx2ni D 4 Rc D I4 bkXH2M;i?UVc YYDV
7(D) 4 UbR(B @ R) 44 bj(B Y D @ R) 7(D)V
%% Ubk(D @ R) 44 bj(B Y D @ R) 7(D @ R)Vc
`2im`M 7(bkXH2M;i?UV)c
13.7 Scramble String
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings
recursively.
Below is one possible representation of bR 4 ];`2i]:
;`2i
f
$
;`
2i
f $
f $
;
` 2
i
f $
i
218
13
To scramble the string, we may choose any non-leaf node and swap its two children.
For example, if we choose the node ];`] and swap its two children, it produces a scrambled string
]`;2i].
`;2i
f
$
`;
2i
f $
f $
`
; 2
i
f $
i
We say that ]`;2i] is a scrambled string of ];`2i].
Similarly, if we continue to swap the children of nodes ]2i] and ]i], it produces a scrambled string
]`;i2].
`;i2
f
$
`;
i2
f $
f $
`
; i 2
f $
i
We say that ]`;i2] is a scrambled string of ];`2i].
Given two strings s1 and s2 of the same length, determine if s2 is a scrambled string of s1.
string
memorization
scamble
false
HashMap
HashMap
bR(B)
bk(D)
scramble
7(M)(B)(D)' 4 U7(F)(B)(D) 7(M@F)(BYF)(DYF)V
%% U7(F)(B)(DYM@F) 7(M@F)(BYF)(D)V
ff G22i*Q/2- a+`K#H2 ai`BM;
ff
ff
PUMeV
+Hbb aQHmiBQM &
KT
7(M)(B)(D)
PURV
mMQ`/2`2/nKT
n
219
13.7 Scramble String
Tm#HB+,
#QQH Bba+`K#H2U+QMbi bi`BM; bR- +QMbi bi`BM; bkV &
`2im`M Bba+`K#H2UbRX#2;BMUV- bRX2M/UV- bkX#2;BMUVVc
'
T`Bpi2,
ivT2/27 bi`BM;,,Bi2`iQ` Ai2`iQ`c
#QQH Bba+`K#H2UAi2`iQ` 7B`biR- Ai2`iQ` HbiR- Ai2`iQ` 7B`bikV &
miQ H2M;i? 4 /BbiM+2U7B`biR- HbiRVc
miQ Hbik 4 M2tiU7B`bik- H2M;i?Vc
B7 UH2M;i? 44 RV `2im`M
7B`biR 44
7B`bikc
7Q` UBMi B 4 Rc B I H2M;i?c YYBV
B7 UUBba+`K#H2U7B`biR- 7B`biR Y B- 7B`bikV
Bba+`K#H2U7B`biR Y B- HbiR- 7B`bik Y BVV
%% UBba+`K#H2U7B`biR- 7B`biR Y B- Hbik @ BV
Bba+`K#H2U7B`biR Y B- HbiR- 7B`bikVVV
`2im`M i`m2c
'c
'
`2im`M 7Hb2c
ff G22i*Q/2- a+`K#H2 ai`BM;
ff
PUMjV
PUMjV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH Bba+`K#H2U+QMbi bi`BM; bR- +QMbi bi`BM; bkV &
+QMbi BMi L 4 bRXbBx2UVc
B7 UL 54 bkXbBx2UVV `2im`M 7Hb2c
ff 7(M)(B)(D)
M
ff
bk(D)
#QQH 7(L Y R)(L)(L)c
7BHHnMU7(y)(y)(y)- UL Y RV
bR(B)
b+`K#H2
L
L- 7Hb2Vc
7Q` UBMi B 4 yc B I Lc BYYV
7Q` UBMi D 4 yc D I Lc DYYV
7(R)(B)(D) 4 bR(B) 44 bk(D)c
7Q` UBMi M 4 Rc M I4 Lc YYMV &
7Q` UBMi B 4 yc B Y M I4 Lc YYBV &
7Q` UBMi D 4 yc D Y M I4 Lc YYDV &
7Q` UBMi F 4 Rc F I Mc YYFV &
B7 UU7(F)(B)(D) 7(M @ F)(B Y F)(D Y F)V %%
U7(F)(B)(D Y M @ F) 7(M @ F)(B Y F)(D)VV &
7(M)(B)(D) 4 i`m2c
#`2Fc
'
'
'
220
'c
13
'
'
'
`2im`M 7(L)(y)(y)c
+
ff G22i*Q/2- a+`K#H2 ai`BM;
ff
Y
ff
PUMeV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH Bba+`K#H2U+QMbi bi`BM; bR- +QMbi bi`BM; bkV &
`2im`M Bba+`K#H2UbRX#2;BMUV- bRX2M/UV- bkX#2;BMUVVc
'
T`Bpi2,
ivT2/27 bi`BM;,,+QMbinBi2`iQ` Ai2`iQ`c
#QQH Bba+`K#H2UAi2`iQ` 7B`biR- Ai2`iQ` HbiR- Ai2`iQ` 7B`bikV &
miQ H2M;i? 4 /BbiM+2U7B`biR- HbiRVc
miQ Hbik 4 M2tiU7B`bik- H2M;i?Vc
B7 UH2M;i? 44 RV `2im`M 7B`biR 44 7B`bikc
ff
BMi (ke)c ff
7BHHU- Y ke- yVc
7Q`UBMi B 4 yc B I H2M;i?c BYYV ( U7B`biRYBV@^^)YYc
7Q`UBMi B 4 yc B I H2M;i?c BYYV ( U7B`bikYBV@^^)@@c
7Q`UBMi B 4 yc B I kec BYYV B7 U(B) 54 yV `2im`M 7Hb2c
7Q` UBMi B 4 Rc B I H2M;i?c YYBV
B7 UUBba+`K#H2U7B`biR- 7B`biR Y B- 7B`bikV
Bba+`K#H2U7B`biR Y B- HbiR- 7B`bik Y BVV
%% UBba+`K#H2U7B`biR- 7B`biR Y B- Hbik @ BV
Bba+`K#H2U7B`biR Y B- HbiR- 7B`bikVVV
`2im`M i`m2c
'c
'
`2im`M 7Hb2c
ff G22i*Q/2- a+`K#H2 ai`BM;
ff
YKT
++?2
ff
PUMjV
PUMjV- hG1
+Hbb aQHmiBQM &
Tm#HB+,
#QQH Bba+`K#H2U+QMbi bi`BM; bR- +QMbi bi`BM; bkV &
++?2X+H2`UVc
`2im`M Bba+`K#H2UbRX#2;BMUV- bRX2M/UV- bkX#2;BMUVVc
'
221
13.7 Scramble String
T`Bpi2,
ivT2/27 bi`BM;,,+QMbinBi2`iQ` Ai2`iQ`c
KTIimTH2IAi2`iQ`- Ai2`iQ`- Ai2`iQ`=- #QQH= ++?2c
#QQH Bba+`K#H2UAi2`iQ` 7B`biR- Ai2`iQ` HbiR- Ai2`iQ` 7B`bikV &
miQ H2M;i? 4 /BbiM+2U7B`biR- HbiRVc
miQ Hbik 4 M2tiU7B`bik- H2M;i?Vc
B7 UH2M;i? 44 RV `2im`M
7B`biR 44
7B`bikc
7Q` UBMi B 4 Rc B I H2M;i?c YYBV
B7 UU;2iP`lT/i2U7B`biR- 7B`biR Y B- 7B`bikV
;2iP`lT/i2U7B`biR Y B- HbiR- 7B`bik Y BVV
%% U;2iP`lT/i2U7B`biR- 7B`biR Y B- Hbik @ BV
;2iP`lT/i2U7B`biR Y B- HbiR- 7B`bikVVV
`2im`M i`m2c
'
`2im`M 7Hb2c
#QQH ;2iP`lT/i2UAi2`iQ` 7B`biR- Ai2`iQ` HbiR- Ai2`iQ` 7B`bikV &
miQ F2v 4 KF2nimTH2U7B`biR- HbiR- 7B`bikVc
miQ TQb 4 ++?2X7BM/UF2vVc
'c
'
`2im`M UTQb 54 ++?2X2M/UVV \
TQb@=b2+QM/ , U++?2(F2v) 4 Bba+`K#H2U7B`biR- HbiR- 7B`bikVVc
ivT2/27 bi`BM;,,+QMbinBi2`iQ` Ai2`iQ`c
ivT2/27 imTH2IAi2`iQ`- Ai2`iQ`- Ai2`iQ`= E2vc
ff
MK2bT+2 bi/ &
i2KTHi2I= bi`m+i ?b?IE2v= &
bBx2ni QT2`iQ`UVU+QMbi E2v tV +QMbi &
Ai2`iQ` 7B`biR- HbiR- 7B`bikc
iB2U7B`biR- HbiR- 7B`bikV 4 tc
'c
'
'
BMi `2bmHi 4 7B`biRc
`2bmHi 4 `2bmHi
jR Y
`2bmHi 4 `2bmHi
jR Y
`2bmHi 4 `2bmHi
jR Y
`2im`M `2bmHic
HbiRc
7B`bikc
UM2tiU7B`bik- /BbiM+2U7B`biR- HbiRV@RVVc
ff G22i*Q/2- a+`K#H2 ai`BM;
ff
YmMQ`/2`2/nKT
++?2
KT
ff
PUMjV
PUMjV
+Hbb aQHmiBQM &
222
13
Tm#HB+,
mMQ`/2`2/nKTIE2v- #QQH= ++?2c
#QQH Bba+`K#H2U+QMbi bi`BM; bR- +QMbi bi`BM; bkV &
++?2X+H2`UVc
`2im`M Bba+`K#H2UbRX#2;BMUV- bRX2M/UV- bkX#2;BMUVVc
'
#QQH Bba+`K#H2UAi2`iQ` 7B`biR- Ai2`iQ` HbiR- Ai2`iQ` 7B`bikV &
miQ H2M;i? 4 /BbiM+2U7B`biR- HbiRVc
miQ Hbik 4 M2tiU7B`bik- H2M;i?Vc
B7 UH2M;i? 44 RV
`2im`M 7B`biR 44
7B`bikc
7Q` UBMi B 4 Rc B I H2M;i?c YYBV
B7 UU;2iP`lT/i2U7B`biR- 7B`biR Y B- 7B`bikV
;2iP`lT/i2U7B`biR Y B- HbiR- 7B`bik Y BVV
%% U;2iP`lT/i2U7B`biR- 7B`biR Y B- Hbik @ BV
;2iP`lT/i2U7B`biR Y B- HbiR- 7B`bikVVV
`2im`M i`m2c
'
`2im`M 7Hb2c
#QQH ;2iP`lT/i2UAi2`iQ` 7B`biR- Ai2`iQ` HbiR- Ai2`iQ` 7B`bikV &
miQ F2v 4 KF2nimTH2U7B`biR- HbiR- 7B`bikVc
miQ TQb 4 ++?2X7BM/UF2vVc
'
'c
`2im`M UTQb 54 ++?2X2M/UVV \
TQb@=b2+QM/ , U++?2(F2v) 4 Bba+`K#H2U7B`biR- HbiR- 7B`bikVVc
13.8 Minimum Path Sum
Given a m n grid filled with non-negative numbers, find a path from top left to bottom right which
minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time
Unique Paths (
10.2)
223
13.8 Minimum Path Sum
7(B)(D)
(0, 0)
(i, j)
7(B)(D)4KBMU7(B@R)(D)- 7(B)(D@R)VY;`B/(B)(D)
ff G22i*Q/2- JBMBKmK Si? amK
ff
+Hbb aQHmiBQM &
Tm#HB+,
BMi KBMSi?amKUp2+iQ`Ip2+iQ`IBMi= = ;`B/V &
+QMbi BMi K 4 ;`B/XbBx2UVc
+QMbi BMi M 4 ;`B/(y)XbBx2UVc
i?Bb@=7 4 p2+iQ`Ip2+iQ`IBMi= =UK- p2+iQ`IBMi=UM- @RVVc
`2im`M /7bU;`B/- K@R- M@RVc
'
T`Bpi2,
p2+iQ`Ip2+iQ`IBMi= = 7c ff
BMi /7bU+QMbi p2+iQ`Ip2+iQ`IBMi= = ;`B/- BMi t- BMi vV &
B7 Ut I y %% v I yV `2im`M ALhnJsc ff
B7 Ut 44 y v 44 yV `2im`M ;`B/(y)(y)c ff
'
'c
`2im`M KBMU;2iP`lT/i2U;`B/- t @ R- vV;2iP`lT/i2U;`B/- t- v @ RVV Y ;`B/(t)(v)c
BMi ;2iP`lT/i2U+QMbi p2+iQ`Ip2+iQ`IBMi= = ;`B/- BMi t- BMi vV &
B7 Ut I y %% v I yV `2im`M ALhnJsc ff
y
B7 U7(t)(v) =4 yV `2im`M 7(t)(v)c
2Hb2 `2im`M 7(t)(v) 4 /7bU;`B/- t- vVc
'
ff G22i*Q/2- JBMBKmK Si? amK
ff
+Hbb aQHmiBQM &
Tm#HB+,
BMi KBMSi?amKUp2+iQ`Ip2+iQ`IBMi= = ;`B/V &
B7 U;`B/XbBx2UV 44 yV `2im`M yc
+QMbi BMi K 4 ;`B/XbBx2UVc
+QMbi BMi M 4 ;`B/(y)XbBx2UVc
BMi 7(K)(M)c
7(y)(y) 4 ;`B/(y)(y)c
7Q` UBMi B 4 Rc B I Kc BYYV
7(B)(y) 4 7(B @ R)(y) Y
'
7Q` UBMi B 4 Rc B I Mc BYYV
7(y)(B) 4 7(y)(B @ R) Y
&
;`B/(B)(y)c
&
;`B/(y)(B)c
224
13
'
'c
'
7Q` UBMi B 4 Rc B I Kc BYYV &
7Q` UBMi D 4 Rc D I Mc DYYV &
7(B)(D) 4 KBMU7(B @ R)(D)- 7(B)(D @ R)V Y ;`B/(B)(D)c
'
'
`2im`M 7(K @ R)(M @ R)c
+
ff G22i*Q/2- JBMBKmK Si? amK
ff
Y
+Hbb aQHmiBQM &
Tm#HB+,
BMi KBMSi?amKUp2+iQ`Ip2+iQ`IBMi= = ;`B/V &
+QMbi BMi K 4 ;`B/XbBx2UVc
+QMbi BMi M 4 ;`B/(y)XbBx2UVc
BMi 7(M)c
7BHHU7- 7YM- ALhnJsVc ff
7(y) 4 yc
'c
'
ALhnJs
KBM
7Q` UBMi B 4 yc B I Kc BYYV &
7(y) Y4 ;`B/(B)(y)c
7Q` UBMi D 4 Rc D I Mc DYYV &
ff
7(D)
7(D)
7(B((D)
ff
7(D)
7(D)
7(B@R)(D)
7(D) 4 KBMU7(D @ R)- 7(D)V Y ;`B/(B)(D)c
'
'
`2im`M 7(M @ R)c
Unique Paths,
Unique Paths II,
10.2
10.3
13.9 Edit Distance
Given two words rQ`/R and rQ`/k, find the minimum number of steps required to convert rQ`/R to
rQ`/k. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
225
13.9 Edit Distance
Insert a character
Delete a character
Replace a character
7(B)(D)
"(y-D)
(y-B)
"(y-D)
(y-B)
bi`k/
1.
+44/
2.
+54/
7(B)(D)47(B@R)(D@R)
(a)
(b)
(c)
7(B)(D)47(B@R)(D@R)YR
d
7(B)(D)47(B)(D@R)YR
7(B)(D)47(B@R)(D)YR
ff G22i*Q/2- 1/Bi .BbiM+2
ff
PUM KV
PUM KV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KBM.BbiM+2U+QMbi bi`BM; rQ`/R- +QMbi bi`BM; rQ`/kV &
+QMbi bBx2ni M 4 rQ`/RXbBx2UVc
+QMbi bBx2ni K 4 rQ`/kXbBx2UVc
ff
M
MYR
BMi 7(M Y R)(K Y R)c
7Q` UbBx2ni B 4 yc B I4 Mc BYYV
7(B)(y) 4 Bc
7Q` UbBx2ni D 4 yc D I4 Kc DYYV
7(y)(D) 4 Dc
'c
'
7Q` UbBx2ni B 4 Rc B I4 Mc BYYV &
7Q` UbBx2ni D 4 Rc D I4 Kc DYYV &
B7 UrQ`/R(B @ R) 44 rQ`/k(D @ R)V
7(B)(D) 4 7(B @ R)(D @ R)c
2Hb2 &
BMi KM 4 KBMU7(B @ R)(D)- 7(B)(D @ R)Vc
7(B)(D) 4 R Y KBMU7(B @ R)(D @ R)- KMVc
'
'
'
`2im`M 7(M)(K)c
bi`R+
226
13
+
ff G22i*Q/2- 1/Bi .BbiM+2
ff
Y
ff
PUM KV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KBM.BbiM+2U+QMbi bi`BM; rQ`/R- +QMbi bi`BM; rQ`/kV &
B7 UrQ`/RXH2M;i?UV I rQ`/kXH2M;i?UVV
`2im`M KBM.BbiM+2UrQ`/k- rQ`/RVc
BMi 7(rQ`/kXH2M;i?UV Y R)c
BMi mTT2`nH27i 4 yc ff
7(B@R)(D@R)
7Q` UbBx2ni B 4 yc B I4 rQ`/kXbBx2UVc YYBV
7(B) 4 Bc
7Q` UbBx2ni B 4 Rc B I4 rQ`/RXbBx2UVc YYBV &
mTT2`nH27i 4 7(y)c
7(y) 4 Bc
7Q` UbBx2ni D 4 Rc D I4 rQ`/kXbBx2UVc YYDV &
BMi mTT2` 4 7(D)c
B7 UrQ`/R(B @ R) 44 rQ`/k(D @ R)V
7(D) 4 mTT2`nH27ic
2Hb2
7(D) 4 R Y KBMUmTT2`nH27i- KBMU7(D)- 7(D @ R)VVc
'
'
'c
'
mTT2`nH27i 4 mTT2`c
`2im`M 7(rQ`/kXH2M;i?UV)c
13.10 Decode Ways
A message containing letters from @w is being encoded to numbers using the following mapping:
^^ @= R
^"^ @= k
XXX
^w^ @= ke
13.11 Distinct Subsequences
227
Given an encoded message containing digits, determine the total number of ways to decode it.
For example, Given encoded message ]Rk], it could be decoded as ]"] (1 2) or ]G] (12).
The number of ways decoding ]Rk] is 2.
Climbing Stairs (
2.1.18)
ff G22i*Q/2- .2+Q/2 qvb
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi MmK.2+Q/BM;bU+QMbi bi`BM; bV &
B7 UbX2KTivUV %% b(y) 44 ^y^V `2im`M yc
BMi T`2p 4 yc
BMi +m` 4 Rc
ff
M
MYR
7Q` UbBx2ni B 4 Rc B I4 bXbBx2UVc YYBV &
B7 Ub(B@R) 44 ^y^V +m` 4 yc
B7 UB I k %% 5Ub(B @ k) 44 ^R^ %%
Ub(B @ k) 44 ^k^ b(B @ R) I4 ^e^VVV
T`2p 4 yc
BMi iKT 4 +m`c
+m` 4 T`2p Y +m`c
T`2p 4 iKTc
'c
'
'
`2im`M +m`c
Climbing Stairs,
2.1.18
13.11 Distinct Subsequences
Given a string S and a string T , count the number of distinct subsequences of T in S.
A subsequence of a string is a new string which is formed from the original string by deleting some (can
be none) of the characters without disturbing the relative positions of the remaining characters. (ie, ]*1] is
a subsequence of ]"*.1] while ]1*] is not).
228
13
Here is an example: S = ]`###Bi], T = ]`##Bi]
Return 3.
h(y-D)
f (i, j)
a(B)
a(y-B)
f (i, j) = f (i 1, j)
a(B)
a(B)44h(D)
a(B)
h(D)
f (i, j) =
f (i 1, j) + f (i 1, j 1)
ff G22i*Q/2- .BbiBM+i am#b2[m2M+2b
ff
Y
ff
PUK MV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi MmK.BbiBM+iU+QMbi bi`BM; a- +QMbi bi`BM; hV &
p2+iQ`IBMi= 7UhXbBx2UV Y RVc
7(y) 4 Rc
7Q` UBMi B 4 yc B I aXbBx2UVc YYBV &
7Q` UBMi D 4 hXbBx2UV @ Rc D =4 yc @@DV &
7(D Y R) Y4 a(B) 44 h(D) \ 7(D) , yc
'
'
'
'c
`2im`M 7(hXbBx2UV)c
13.12 Word Break
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated
sequence of one or more dictionary words.
For example, given
s = ]H22i+Q/2],
dict = (]H22i]- ]+Q/2]).
Return true because ]H22i+Q/2] can be segmented as ]H22i +Q/2].
229
13.12 Word Break
f (i)
b(y-B)
f (i) = any_of (f (j)&&s[j + 1, i] dict), 0 j < i
ff G22i*Q/2- qQ`/ "`2F
ff
ff
PUkMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH rQ`/"`2FUbi`BM; b- mMQ`/2`2/nb2iIbi`BM;= /B+iV &
`2im`M /7bUb- /B+i- y- yVc
'
T`Bpi2,
biiB+ #QQH /7bU+QMbi bi`BM; b- mMQ`/2`2/nb2iIbi`BM;= /B+ibBx2ni bi`i- bBx2ni +m`V &
B7 U+m` 44 bXbBx2UVV &
`2im`M /B+iX7BM/UbXbm#bi`Ubi`i- +m`@bi`iYRVV 54 /B+iX2M/UVc
'
B7 U/7bUb- /B+i- bi`i- +m`YRVV `2im`M i`m2c
B7 U/B+iX7BM/UbXbm#bi`Ubi`i- +m`@bi`iYRVV 54 /B+iX2M/UVV
B7 U/7bUb- /B+i- +m`YR- +m`YRVV `2im`M i`m2c
`2im`M 7Hb2c
'
'c
ff G22i*Q/2- qQ`/ "`2F
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
#QQH rQ`/"`2FUbi`BM; b- mMQ`/2`2/nb2iIbi`BM;= /B+iV &
ff
M
MYR
p2+iQ`I#QQH= 7UbXbBx2UV Y R- 7Hb2Vc
7(y) 4 i`m2c ff
7Q` UBMi B 4 Rc B I4 bXbBx2UVc YYBV &
7Q` UBMi D 4 B @ Rc D =4 yc @@DV &
B7 U7(D) /B+iX7BM/UbXbm#bi`UD- B @ DVV 54 /B+iX2M/UVV &
7(B) 4 i`m2c
#`2Fc
'
'
'
`2im`M 7(bXbBx2UV)c
'
'c
230
13
Word Break II,
13.13
13.13 Word Break II
Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word
is a valid dictionary word.
Return all such possible sentences.
For example, given
s = ]+ibM//Q;],
dict = (]+i]- ]+ib]- ]M/]- ]bM/]- ]/Q;]).
A solution is (]+ib M/ /Q;]- ]+i bM/ /Q;]).
ff G22i*Q/2- qQ`/ "`2F AA
ff
PUMkV
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ibi`BM;= rQ`/"`2FUbi`BM; b- mMQ`/2`2/nb2iIbi`BM;= /B+iV &
ff
M
MYR
p2+iQ`I#QQH= 7UbXH2M;i?UV Y R- 7Hb2Vc
ff T`2p(B)(D)
i`m2
b(D- BV
D
ff
p2+iQ`Ip2+iQ`I#QQH= = T`2pUbXH2M;i?UV Y R- p2+iQ`I#QQH=UbXH2M;i?UVVVc
7(y) 4 i`m2c
7Q` UbBx2ni B 4 Rc B I4 bXH2M;i?UVc YYBV &
7Q` UBMi D 4 B @ Rc D =4 yc @@DV &
B7 U7(D) /B+iX7BM/UbXbm#bi`UD- B @ DVV 54 /B+iX2M/UVV &
7(B) 4 i`m2c
T`2p(B)(D) 4 i`m2c
'
'
'
p2+iQ`Ibi`BM;= `2bmHic
p2+iQ`Ibi`BM;= Ti?c
;2MnTi?Ub- T`2p- bXH2M;i?UV- Ti?- `2bmHiVc
`2im`M `2bmHic
'
231
13.13 Word Break II
T`Bpi2,
ff .6a
pQB/ ;2MnTi?U+QMbi bi`BM; b- +QMbi p2+iQ`Ip2+iQ`I#QQH= = T`2pBMi +m`- p2+iQ`Ibi`BM;= Ti?- p2+iQ`Ibi`BM;= `2bmHiV &
B7 U+m` 44 yV &
bi`BM; iKTc
7Q` UmiQ Bi2` 4 Ti?X+`#2;BMUVc Bi2` 54 Ti?X+`2M/UVc YYBi2`V
iKT Y4 Bi2` Y ] ]c
iKTX2`b2UiKTX2M/UV @ RVc
`2bmHiXTmb?n#+FUiKTVc
'
7Q` UbBx2ni B 4 yc B I bXbBx2UVc YYBV &
B7 UT`2p(+m`)(B)V &
Ti?XTmb?n#+FUbXbm#bi`UB- +m` @ BVVc
;2MnTi?Ub- T`2p- B- Ti?- `2bmHiVc
Ti?XTQTn#+FUVc
'
'
'
'c
Word Break,
13.12
14
ff
bi`m+i lM/B`2+i2/:`T?LQ/2 &
BMi H#2Hc
p2+iQ`IlM/B`2+i2/:`T?LQ/2 = M2B;?#Q`bc
lM/B`2+i2/:`T?LQ/2UBMi tV , H#2HUtV &'c
'c
14.1 Clone Graph
Clone an undirected graph. Each node in the graph contains a H#2H and a list of its M2B;?#Qm`b.
OJs undirected graph serialization: Nodes are labeled uniquely.
We use O as a separator for each node, and - as a separator for node label and each neighbour of the
node. As an example, consider the serialized graph &y-R-kOR-kOk-k'.
The graph has a total of three nodes, and therefore contains three parts as separated by O.
1. First node is labeled as 0. Connect node 0 to both nodes 1 and 2.
2. Second node is labeled as 1. Connect node 1 to node 2.
3. Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle.
Visually, the graph looks like the following:
R
f $
f
$
y @@@ k
f $
$nf
232
14.1 Clone Graph
DFS
ff G22i*Q/2- *HQM2 :`T?
ff .6a
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
lM/B`2+i2/:`T?LQ/2 +HQM2:`T?U+QMbi lM/B`2+i2/:`T?LQ/2 MQ/2V &
B7UMQ/2 44 MmHHTi`V `2im`M MmHHTi`c
ff F2v Bb Q`B;BMH MQ/2 pHm2 Bb +QTB2/ MQ/2
mMQ`/2`2/nKTI+QMbi lM/B`2+i2/:`T?LQ/2 lM/B`2+i2/:`T?LQ/2 = +QTB2/c
+HQM2UMQ/2- +QTB2/Vc
`2im`M +QTB2/(MQ/2)c
'
T`Bpi2,
ff .6a
biiB+ lM/B`2+i2/:`T?LQ/2 +HQM2U+QMbi lM/B`2+i2/:`T?LQ/2 MQ/2mMQ`/2`2/nKTI+QMbi lM/B`2+i2/:`T?LQ/2 lM/B`2+i2/:`T?LQ/2 = +QTB2/V &
ff +QTv H`2/v 2tBbib
B7 U+QTB2/X7BM/UMQ/2V 54 +QTB2/X2M/UVV `2im`M +QTB2/(MQ/2)c
'c
'
lM/B`2+i2/:`T?LQ/2 M2rnMQ/2 4 M2r lM/B`2+i2/:`T?LQ/2UMQ/2@=H#2HVc
+QTB2/(MQ/2) 4 M2rnMQ/2c
7Q` UmiQ M#` , MQ/2@=M2B;?#Q`bV
M2rnMQ/2@=M2B;?#Q`bXTmb?n#+FU+HQM2UM#`- +QTB2/VVc
`2im`M M2rnMQ/2c
BFS
ff G22i*Q/2- *HQM2 :`T?
ff "6a
PUMV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
lM/B`2+i2/:`T?LQ/2 +HQM2:`T?U+QMbi lM/B`2+i2/:`T?LQ/2 MQ/2V &
B7 UMQ/2 44 MmHHTi`V `2im`M MmHHTi`c
ff F2v Bb Q`B;BMH MQ/2 pHm2 Bb +QTB2/ MQ/2
mMQ`/2`2/nKTI+QMbi lM/B`2+i2/:`T?LQ/2 lM/B`2+i2/:`T?LQ/2 = +QTB2/c
ff 2+? MQ/2 BM [m2m2 Bb H`2/v +QTB2/ Bib2H7
ff #mi M2B;?#Q`b `2 MQi +QTB2/ v2i
[m2m2I+QMbi lM/B`2+i2/:`T?LQ/2 = [c
[XTmb?UMQ/2Vc
+QTB2/(MQ/2) 4 M2r lM/B`2+i2/:`T?LQ/2UMQ/2@=H#2HVc
r?BH2 U5[X2KTivUVV &
+QMbi lM/B`2+i2/:`T?LQ/2 +m` 4 [X7`QMiUVc
[XTQTUVc
7Q` UmiQ M#` , +m`@=M2B;?#Q`bV &
ff +QTv H`2/v 2tBbib
B7 U+QTB2/X7BM/UM#`V 54 +QTB2/X2M/UVV &
+QTB2/(+m`)@=M2B;?#Q`bXTmb?n#+FU+QTB2/(M#`)Vc
233
234
14
' 2Hb2 &
lM/B`2+i2/:`T?LQ/2 M2rnMQ/2 4
M2r lM/B`2+i2/:`T?LQ/2UM#`@=H#2HVc
+QTB2/(M#`) 4 M2rnMQ/2c
+QTB2/(+m`)@=M2B;?#Q`bXTmb?n#+FUM2rnMQ/2Vc
[XTmb?UM#`Vc
'
'c
'
'
'
`2im`M +QTB2/(MQ/2)c
15
15.1 Reverse Integer
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Have you thought about this?
Here are some good questions to ask before coding. Bonus points for you if you have already thought
through this!
If the integers last digit is 0, what should the output be? ie, cases such as 10, 100.
Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the
reverse of 1000000003 overflows. How should you handle such cases?
Throw an exception? Good, but what if throwing an exception is not an option? You would then have
to re-design the function (ie, add an extra parameter).
ffG22i*Q/2- _2p2`b2 AMi2;2`
ff
PUHQ;MV
ff
RX
kX
+Hbb aQHmiBQM &
Tm#HB+,
BMi `2p2`b2 UBMi tV &
HQM; HQM; ` 4 yc
HQM; HQM; i 4 tc
i 4 i = y \ i , @ic
PURV
U
235
t 4 @kR9d93je93U
@kjRV V
236
15
7Q` Uc ic i f4 RyV
` 4 `
Ry Y i W Ryc
'c
'
#QQH bB;M 4 t = y \ 7Hb2, i`m2c
B7 U` = kR9d93je9d %% UbB;M ` = kR9d93je93VV &
`2im`M yc
' 2Hb2 &
B7 UbB;MV &
`2im`M @`c
' 2Hb2 &
`2im`M `c
'
'
Palindrome Number,
15.2
15.2 Palindrome Number
Determine whether an integer is a palindrome. Do this without extra space.
Some hints:
Could negative integers be palindromes? (ie, -1)
If you are thinking of converting the integer to string, note the restriction of using extra space.
You could also try reversing an integer. However, if you have solved the problem Reverse Integer,
you know that the reversed integer might overflow. How would you handle such case?
There is a more generic way of solving this problem.
Palindrome
reverse()
ffG22i*Q/2- SHBM/`QK2 LmK#2`
ff
PURV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
10
237
15.3 Insert Interval
#QQH BbSHBM/`QK2UBMi tV &
B7 Ut I yV `2im`M 7Hb2c
BMi / 4 Rc ff /BpBbQ`
r?BH2 Ut f / =4 RyV / 4 Ryc
'c
'
r?BH2 Ut = yV &
BMi [ 4 t f
BMi ` 4 t W
B7 U[ 54 `V
t 4 t W / f
/ f4 Ryyc
'
`2im`M i`m2c
/c ff [mQiB2Mi
Ryc
ff `2KBM/2`
`2im`M 7Hb2c
Ryc
Reverse Integer,
Valid Palindrome,
15.1
3.1
15.3 Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1: Given intervals (R-j)-(e-N), insert and merge (k-8) in as (R-8)-(e-N).
Example 2:
Given (R-k)-(j-8)-(e-d)-(3-Ry)-(Rk-Re), insert and merge (9-N) in as
(R-k)-(j-Ry)-(Rk-Re).
This is because the new interval (9-N) overlaps with (j-8)-(e-d)-(3-Ry).
bi`m+i AMi2`pH &
BMi bi`ic
BMi 2M/c
AMi2`pHUV , bi`iUyV- 2M/UyV & '
AMi2`pHUBMi b- BMi 2V , bi`iUbV- 2M/U2V & '
'c
ffG22i*Q/2- AMb2`i AMi2`pH
238
15
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IAMi2`pH= BMb2`iUp2+iQ`IAMi2`pH= BMi2`pHb- AMi2`pH M2rAMi2`pHV &
p2+iQ`IAMi2`pH=,,Bi2`iQ` Bi 4 BMi2`pHbX#2;BMUVc
r?BH2 UBi 54 BMi2`pHbX2M/UVV &
B7 UM2rAMi2`pHX2M/ I Bi@=bi`iV &
BMi2`pHbXBMb2`iUBi- M2rAMi2`pHVc
`2im`M BMi2`pHbc
' 2Hb2 B7 UM2rAMi2`pHXbi`i = Bi@=2M/V &
BiYYc
+QMiBMm2c
' 2Hb2 &
M2rAMi2`pHXbi`i 4 KBMUM2rAMi2`pHXbi`i- Bi@=bi`iVc
M2rAMi2`pHX2M/ 4 KtUM2rAMi2`pHX2M/- Bi@=2M/Vc
Bi 4 BMi2`pHbX2`b2UBiVc
'
'
BMi2`pHbXBMb2`iUBMi2`pHbX2M/UV- M2rAMi2`pHVc
`2im`M BMi2`pHbc
'
'c
Merge Intervals
15.4
15.4 Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
For example, Given (R-j)-(k-e)-(3-Ry)-(R8-R3), return (R-e)-(3-Ry)-(R8-R3)
Insert Intervals
interval
interval
bi`m+i AMi2`pH &
BMi bi`ic
BMi 2M/c
AMi2`pHUV , bi`iUyV- 2M/UyV & '
AMi2`pHUBMi b- BMi 2V , bi`iUbV- 2M/U2V & '
'c
15.5 Minimum Window Substring
239
ffG22i*Q/2- J2`;2 AMi2`pH
ff
AMb2`i AMi2`pHb
ff
PUMRYMkYXXXV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IAMi2`pH= K2`;2Up2+iQ`IAMi2`pH= BMi2`pHbV &
p2+iQ`IAMi2`pH= `2bmHic
7Q` UBMi B 4 yc B I BMi2`pHbXbBx2UVc BYYV &
BMb2`iU`2bmHi- BMi2`pHb(B)Vc
'
`2im`M `2bmHic
'
T`Bpi2,
p2+iQ`IAMi2`pH= BMb2`iUp2+iQ`IAMi2`pH= BMi2`pHb- AMi2`pH M2rAMi2`pHV &
p2+iQ`IAMi2`pH=,,Bi2`iQ` Bi 4 BMi2`pHbX#2;BMUVc
r?BH2 UBi 54 BMi2`pHbX2M/UVV &
B7 UM2rAMi2`pHX2M/ I Bi@=bi`iV &
BMi2`pHbXBMb2`iUBi- M2rAMi2`pHVc
`2im`M BMi2`pHbc
' 2Hb2 B7 UM2rAMi2`pHXbi`i = Bi@=2M/V &
BiYYc
+QMiBMm2c
' 2Hb2 &
M2rAMi2`pHXbi`i 4 KBMUM2rAMi2`pHXbi`i- Bi@=bi`iVc
M2rAMi2`pHX2M/ 4 KtUM2rAMi2`pHX2M/- Bi@=2M/Vc
Bi 4 BMi2`pHbX2`b2UBiVc
'
'
BMi2`pHbXBMb2`iUBMi2`pHbX2M/UV- M2rAMi2`pHVc
`2im`M BMi2`pHbc
'
'c
Insert Interval
15.3
15.5 Minimum Window Substring
Given a string S and a string T , find the minimum window in S which will contain all the characters in
T in complexity O(n).
For example, a 4 ].P"1*P.1"L*]- h 4 ]"*]
Minimum window is ]"L*].
Note:
If there is no such window in S that covers all characters in T , return the emtpy string ]].
240
15
If there are multiple such windows, you are guaranteed that there will always be only one unique
minimum window in S.
ff G22i*Q/2- JBMBKmK qBM/Qr am#bi`BM;
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; KBMqBM/QrUbi`BM; a- bi`BM; hV &
B7 UaX2KTivUVV `2im`M ]]c
B7 UaXbBx2UV I hXbBx2UVV `2im`M ]]c
+QMbi BMi a*AAnJs 4 k8ec
BMi TT2`2/n+QmMi(a*AAnJs)c
BMi 2tT2+i2/n+QmMi(a*AAnJs)c
7BHHUTT2`2/n+QmMi- TT2`2/n+QmMi Y a*AAnJs- yVc
7BHHU2tT2+i2/n+QmMi- 2tT2+i2/n+QmMi Y a*AAnJs- yVc
7Q` UbBx2ni B 4 yc B I hXbBx2UVc BYYV 2tT2+i2/n+QmMi(h(B))YYc
BMi
BMi
BMi
ff
7Q`
'
KBMqB/i? 4 ALhnJs- KBMnbi`i 4 yc
rM/nbi`i 4 yc
TT2`2/ 4 yc ff
h
ff
UbBx2ni rM/n2M/ 4 yc rM/n2M/ I aXbBx2UVc rM/n2M/YYV &
B7 U2tT2+i2/n+QmMi(a(rM/n2M/)) = yV & ff i?Bb +?` Bb T`i Q7 h
TT2`2/n+QmMi(a(rM/n2M/))YYc
B7 UTT2`2/n+QmMi(a(rM/n2M/)) I4 2tT2+i2/n+QmMi(a(rM/n2M/))V
TT2`2/YYc
'
B7 UTT2`2/ 44 hXbBx2UVV & ff
h
ff
r?BH2 UTT2`2/n+QmMi(a(rM/nbi`i)) = 2tT2+i2/n+QmMi(a(rM/nbi`i))
%% 2tT2+i2/n+QmMi(a(rM/nbi`i)) 44 yV &
TT2`2/n+QmMi(a(rM/nbi`i))@@c
rM/nbi`iYYc
'
B7 UKBMqB/i? = UrM/n2M/ @ rM/nbi`i Y RVV &
KBMqB/i? 4 rM/n2M/ @ rM/nbi`i Y Rc
KBMnbi`i 4 rM/nbi`ic
'
'
B7 UKBMqB/i? 44 ALhnJsV `2im`M ]]c
241
15.6 Multiply Strings
'
'c
2Hb2 `2im`M aXbm#bi`UKBMnbi`i- KBMqB/i?Vc
15.6 Multiply Strings
Given two numbers represented as strings, return multiplication of the numbers as a string.
Note: The numbers can be arbitrarily large and are non-negative.
int
int32
31
int
9
1 = 2147483647
int64
1
ff G22i*Q/2- JmHiBTHv ai`BM;b
ff !mi?Q`
U?iiT,ffr2B#QX+QKfHBM+?2M;xDmV
ff
BMi
ff
PUM KV
PUMYKV
ivT2/27 p2+iQ`IBMi= #B;BMic
#B;BMi KF2n#B;BMiUbi`BM; +QMbi `2T`V &
#B;BMi Mc
i`Mb7Q`KU`2T`X`#2;BMUV- `2T`X`2M/UV- #+FnBMb2`i2`UMV()U+?` +V & `2im`M + @ ^y^c 'Vc
`2im`M Mc
'
bi`BM; iQnbi`BM;U#B;BMi +QMbi MV
bi`BM; bi`c
i`Mb7Q`KU7BM/nB7UMX`#2;BMUV()U+?` +V & `2im`M +
()U+?` +V & `2im`M +
`2im`M bi`c
'
&
T`2pUMX`2M/UVV= ^$y^c 'V- MX`2M/UV- #+FnBMb2`i2`Ubi`VY ^y^c 'Vc
#B;BMi QT2`iQ` U#B;BMi +QMbi t- #B;BMi +QMbi vV &
#B;BMi xUtXbBx2UV Y vXbBx2UVVc
242
15
7Q` UbBx2ni B 4 yc B I tXbBx2UVc YYBV
7Q` UbBx2ni D 4 yc D I vXbBx2UVc YYDV &
x(B Y D) Y4 t(B)
v(D)c
x(B Y D Y R) Y4 x(B Y D) f Ryc
x(B Y D) W4 Ryc
'
'
`2im`M xc
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; KmHiBTHvUbi`BM; MmKR- bi`BM; MmKkV &
`2im`M iQnbi`BM;UKF2n#B;BMiUMmKRV
KF2n#B;BMiUMmKkVVc
'
'c
2
ff G22i*Q/2- JmHiBTHv ai`BM;b
ff N
BMie9ni
ff
PUM Kf3RV
PUUMYKVfNV
f
X f
+Hbb "B;AMi &
Tm#HB+,
f
!#`B27
X
!T`K(BM) b
!`2im`M
f
"B;AMiUbi`BM; bV &
p2+iQ`IBMie9ni= `2bmHic
`2bmHiX`2b2`p2UbXbBx2UV f _.AsnG1L Y RVc
'
f
7Q` UBMi B 4 bXbBx2UVc B = yc B @4 _.AsnG1LV &
BMi i2KT 4 yc
+QMbi BMi HQr 4 KtUB @ _.AsnG1L- yVc
7Q` UBMi D 4 HQrc D I Bc DYYV &
i2KT 4 i2KT
Ry Y b(D) @ ^y^c
'
`2bmHiXTmb?n#+FUi2KTVc
'
2H2Kb 4 `2bmHic
ff (B@_.AsnG1L- BV
!#`B27
X
!`2im`M
f
bi`BM; iQai`BM;UV &
bi`BM;bi`2K `2bmHic
#QQH bi`i2/ 4 7Hb2c ff
y
7Q` UmiQ B 4 2H2KbX`#2;BMUVc B 54 2H2KbX`2M/UVc BYYV &
243
15.6 Multiply Strings
'
'
B7 Ubi`i2/V & ff
y
`2bmHi II b2irU_.AsnG1LV II b2i7BHHU^y^V II
' 2Hb2 &
`2bmHi II Bc
bi`i2/ 4 i`m2c ff
y
'
B7 U5bi`i2/V `2im`M ]y]c ff
2Hb2 `2im`M `2bmHiXbi`UVc
Bc
y
!#`B27
X
!T`K(BM) t t
!T`K(BM) v v
!`2im`M
f
biiB+ "B;AMi KmHiBTHvU+QMbi "B;AMi t- +QMbi "B;AMi vV &
p2+iQ`IBMie9ni= xUtX2H2KbXbBx2UV Y vX2H2KbXbBx2UV- yVc
7Q` UbBx2ni B 4 yc B I vX2H2KbXbBx2UVc BYYV &
7Q` UbBx2ni D 4 yc D I tX2H2KbXbBx2UVc DYYV & ff
ff
B- D
BYD
x(B Y D) Y4 vX2H2Kb(B)
tX2H2Kb(D)c
v(B)
B7 Ux(B Y D) =4 "A:ALhn_.AsV & ff
x(B Y D Y R) Y4 x(B Y D) f "A:ALhn_.Asc ff
x(B Y D) W4 "A:ALhn_.Asc
'
'
'
'
r?BH2 UxX#+FUV 44 yV xXTQTn#+FUVc
`2im`M "B;AMiUxVc
ff
T`Bpi2,
ivT2/27 HQM; HQM; BMie9nic
f
N
Ryyyyyyyyy
Ryyyyyyyyy
kej@R
f
+QMbi biiB+ BMi "A:ALhn_.As 4 Ryyyyyyyyyc
+QMbi biiB+ BMi _.AsnG1L 4 Nc
f
X f
p2+iQ`IBMie9ni= 2H2Kbc
"B;AMiU+QMbi p2+iQ`IBMie9ni= MmKV , 2H2KbUMmKV &'
'c
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; KmHiBTHvUbi`BM; MmKR- bi`BM; MmKkV &
"B;AMi tUMmKRVc
244
15
'
'c
"B;AMi vUMmKkVc
`2im`M "B;AMi,,KmHiBTHvUt- vVXiQai`BM;UVc
15.7 Substring with Concatenation of All Words
You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of
substring(s) in S that is a concatenation of each word in L exactly once and without any intervening characters.
For example, given:
a, ]#`7QQi?27QQ#`KM]
G, (]7QQ]- ]#`])
You should return the indices: (y-N).(order does not matter).
ff G22i*Q/2- am#bi`BM; rBi? *QM+i2MiBQM Q7 HH qQ`/b
ff
PUM KV
PUKV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= 7BM/am#bi`BM;Ubi`BM; b- p2+iQ`Ibi`BM;= /B+iV &
bBx2ni rQ`/G2M;i? 4 /B+iX7`QMiUVXH2M;i?UVc
bBx2ni +iG2M;i? 4 rQ`/G2M;i?
/B+iXbBx2UVc
p2+iQ`IBMi= `2bmHic
B7 UbXH2M;i?UV I +iG2M;i?V `2im`M `2bmHic
mMQ`/2`2/nKTIbi`BM;- BMi= rQ`/*QmMic
7Q` UmiQ +QMbi rQ`/ , /B+iV YYrQ`/*QmMi(rQ`/)c
7Q` UmiQ B 4 #2;BMUbVc B I4 T`2pU2M/UbV- +iG2M;i?Vc YYBV &
mMQ`/2`2/nKTIbi`BM;- BMi= mMmb2/UrQ`/*QmMiVc
7Q` UmiQ D 4 Bc D 54 M2tiUB- +iG2M;i?Vc D Y4 rQ`/G2M;i?V &
miQ TQb 4 mMmb2/X7BM/Ubi`BM;UD- M2tiUD- rQ`/G2M;i?VVVc
245
15.8 Pascals Triangle
B7 UTQb 44 mMmb2/X2M/UV %% TQb@=b2+QM/ 44 yV #`2Fc
'
'
'
'c
B7 U@@TQb@=b2+QM/ 44 yV mMmb2/X2`b2UTQbVc
B7 UmMmb2/XbBx2UV 44 yV `2bmHiXTmb?n#+FU/BbiM+2U#2;BMUbV- BVVc
`2im`M `2bmHic
15.8 Pascals Triangle
Given numRows, generate the first numRows of Pascals triangle.
For example, given numRows = 5,
Return
(
(R)(R-R)(R-k-R)(R-j-j-R)(R-9-e-9-R)
ff G22i*Q/2- Sb+H^b h`BM;H2
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = ;2M2`i2UBMi MmK_QrbV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
246
15
B7UMmK_Qrb 44 yV `2im`M `2bmHic
`2bmHiXTmb?n#+FUp2+iQ`IBMi=UR-RVVc ff7B`bi `Qr
7Q`UBMi B 4 kc B I4 MmK_Qrbc YYBV &
p2+iQ`IBMi= +m``2MiUB-RVc ff
+QMbi p2+iQ`IBMi= T`2p 4 `2bmHi(B@k)c
ff
7Q`UBMi D 4 Rc D I B @ Rc YYDV &
+m``2Mi(D) 4 T`2p(D@R) Y T`2p(D)c ff
'
`2bmHiXTmb?n#+FU+m``2MiVc
'c
'
'
`2im`M `2bmHic
ff G22i*Q/2- Sb+H^b h`BM;H2
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = ;2M2`i2UBMi MmK_QrbV &
p2+iQ`Ip2+iQ`IBMi= = `2bmHic
p2+iQ`IBMi= ``vc
7Q` UBMi B 4 Rc B I4 MmK_Qrbc BYYV &
7Q` UBMi D 4 B @ kc D = yc D@@V &
``v(D) 4 ``v(D @ R) Y ``v(D)c
'
``vXTmb?n#+FURVc
`2bmHiXTmb?n#+FU``vVc
'
`2im`M `2bmHic
'
'c
Pascals Triangle II
15.9
15.9 Pascals Triangle II
Given an index k, return the kth row of the Pascals triangle.
For example, given k = 3,
Return (R-j-j-R).
Note: Could you optimize your algorithm to use only O(k) extra space?
247
15.10 Spiral Matrix
ff G22i*Q/2- Sb+H^b h`BM;H2 AA
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= ;2i_QrUBMi `QrAM/2tV &
p2+iQ`IBMi= ``vc
7Q` UBMi B 4 yc B I4 `QrAM/2tc BYYV &
7Q` UBMi D 4 B @ Rc D = yc D@@V&
``v(D) 4 ``v(D @ R) Y ``v(D)c
'
``vXTmb?n#+FURVc
'
`2im`M ``vc
'
'c
Pascals Triangle
15.8
15.10 Spiral Matrix
Given a matrix of m n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example, Given the following matrix:
(
( R- k- j )( 9- 8- e )( d- 3- N )
You should return (R-k-j-e-N-3-d-9-8).
248
15
ff G22i*Q/2- aTB`H Ji`Bt
ff !mi?Q`
U?iiT,ffr2B#QX+QKfHmM;QM;V
ff
PUMkV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`IBMi= bTB`HP`/2`Up2+iQ`Ip2+iQ`IBMi= = Ki`BtV &
p2+iQ`IBMi= `2bmHic
B7 UKi`BtX2KTivUVV `2im`M `2bmHic
BMi #2;BMs 4 y- 2M/s 4 Ki`Bt(y)XbBx2UV @ Rc
BMi #2;BMu 4 y- 2M/u 4 Ki`BtXbBx2UV @ Rc
r?BH2 Ui`m2V &
ff 6`QK H27i iQ `B;?i
7Q` UBMi D 4 #2;BMsc D I4 2M/sc YYDV `2bmHiXTmb?n#+FUKi`Bt(#2;BMu)(D)Vc
B7 UYY#2;BMu = 2M/uV #`2Fc
ff 6`QK iQT iQ #QiiQK
7Q` UBMi B 4 #2;BMuc B I4 2M/uc YYBV `2bmHiXTmb?n#+FUKi`Bt(B)(2M/s)Vc
B7 U#2;BMs = @@2M/sV #`2Fc
ff 6`QK `B;?i iQ H27i
7Q` UBMi D 4 2M/sc D =4 #2;BMsc @@DV `2bmHiXTmb?n#+FUKi`Bt(2M/u)(D)Vc
B7 U#2;BMu = @@2M/uV #`2Fc
ff 6`QK #QiiQK iQ iQT
7Q` UBMi B 4 2M/uc B =4 #2;BMuc @@BV `2bmHiXTmb?n#+FUKi`Bt(B)(#2;BMs)Vc
B7 UYY#2;BMs = 2M/sV #`2Fc
'
`2im`M `2bmHic
'
'c
Spiral Matrix II
15.11
15.11 Spiral Matrix II
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example, Given n = 3,
You should return the following matrix:
(
( R- k- j )( 3- N- 9 )( d- e- 8 )
249
15.11 Spiral Matrix II
1
ff G22i*Q/2- aTB`H Ji`Bt AA
ff
PUMkV
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = ;2M2`i2Ji`BtUBMi MV &
p2+iQ`Ip2+iQ`IBMi= = Ki`BtUM- p2+iQ`IBMi=UMVVc
BMi #2;BM 4 y- 2M/ 4 M @ Rc
BMi MmK 4 Rc
r?BH2 U#2;BM
7Q` UBMi
7Q` UBMi
7Q` UBMi
7Q` UBMi
YY#2;BMc
@@2M/c
'
I
D
B
D
B
2M/V &
4 #2;BMc
4 #2;BMc
4 2M/c D
4 2M/c B
D
B
=
=
I 2M/c
I 2M/c
#2;BMc
#2;BMc
YYDV
YYBV
@@DV
@@BV
Ki`Bt(#2;BM)(D)
Ki`Bt(B)(2M/) 4
Ki`Bt(2M/)(D) 4
Ki`Bt(B)(#2;BM)
4 MmKYYc
MmKYYc
MmKYYc
4 MmKYYc
B7 U#2;BM 44 2M/V Ki`Bt(#2;BM)(#2;BM) 4 MmKc
'c
'
`2im`M Ki`Btc
2
ff G22i*Q/2- aTB`H Ji`Bt AA
ff !mi?Q`
U?iiT,ffr2B#QX+QKfHmM;QM;V
ff
PUMkV
PUMkV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ip2+iQ`IBMi= = ;2M2`i2Ji`BtUBMi MV &
p2+iQ`I p2+iQ`IBMi= = Ki`BtUM- p2+iQ`IBMi=UMVVc
B7 UM 44 yV `2im`M Ki`Btc
BMi #2;BMs 4 y- 2M/s 4 M @ Rc
BMi #2;BMu 4 y- 2M/u 4 M @ Rc
BMi MmK 4 Rc
r?BH2 Ui`m2V &
7Q` UBMi D 4 #2;BMsc D I4 2M/sc YYDV Ki`Bt(#2;BMu)(D) 4 MmKYYc
B7 UYY#2;BMu = 2M/uV #`2Fc
7Q` UBMi B 4 #2;BMuc B I4 2M/uc YYBV Ki`Bt(B)(2M/s) 4 MmKYYc
B7 U#2;BMs = @@2M/sV #`2Fc
7Q` UBMi D 4 2M/sc D =4 #2;BMsc @@DV Ki`Bt(2M/u)(D) 4 MmKYYc
B7 U#2;BMu = @@2M/uV #`2Fc
250
15
7Q` UBMi B 4 2M/uc B =4 #2;BMuc @@BV Ki`Bt(B)(#2;BMs) 4 MmKYYc
B7 UYY#2;BMs = 2M/sV #`2Fc
'c
'
'
`2im`M Ki`Btc
Spiral Matrix,
15.10
15.12 ZigZag Conversion
The string ]SuSGAa>A_AL:] is written in a zigzag pattern on a given number of rows like this: (you
may want to display this pattern in a fixed font for better legibility)
S
>
L
S G a A A :
u
A
_
And then read line by line: ]S>LSGaAA:uA_]
Write the code that will take a string and make this conversion given a number of rows:
bi`BM; +QMp2`iUbi`BM; i2ti- BMi M_QrbVc
+QMp2`iU]SuSGAa>A_AL:]- jV should return ]S>LSGaAA:uA_].
n=4:
S
A
L
G a
A :
u
> _
S
A
n=5:
S
>
a A
u
A
_
S G
A
L
:
(i, j) = (j + 1) n + i
(i, j) = (j + 1) n i
251
15.13 Divide Two Integers
ff G22i*Q/2- wB;w; *QMp2`bBQM
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
bi`BM; +QMp2`iUbi`BM; b- BMi M_QrbV &
B7 UM_Qrb I4 R %% bXbBx2UV I4 RV `2im`M bc
bi`BM; `2bmHic
7Q` UBMi B 4 yc B I M_Qrbc BYYV &
7Q` UBMi D 4 y- BM/2t 4 Bc BM/2t I bXbBx2UVc
DYY- BM/2t 4 Uk
M_Qrb @ kV
D Y BV &
`2bmHiXTT2M/UR- b(BM/2t)Vc ff
B7 UB 44 y %% B 44 M_Qrb @ RV +QMiBMm2c
ff
B7 UBM/2t Y UM_Qrb @ B @ RV
k I bXbBx2UVV
`2bmHiXTT2M/UR- b(BM/2t Y UM_Qrb @ B @ RV
'
'
`2im`M `2bmHic
'
'c
k)Vc
15.13 Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
1
ff G22i*Q/2- .BpB/2 hrQ AMi2;2`b
ff
PUHQ;MV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi /BpB/2UBMi /BpB/2M/- BMi /BpBbQ`V &
ff
/BpB/2M/ 4 ALhnJAL
@/BpB/2M/
HQM; HQM;
HQM; HQM; 4 /BpB/2M/ =4 y \ /BpB/2M/ , @UHQM; HQM;V/BpB/2M/c
HQM; HQM; # 4 /BpBbQ` =4 y \ /BpBbQ` , @UHQM; HQM;V/BpBbQ`c
252
15
ff
/BpB/2M/ 4 ALhnJAL
/BpBbQ` 4 @R
HQM; HQM; `2bmHi 4 yc
r?BH2 U =4 #V &
HQM; HQM; + 4 #c
7Q` UBMi B 4 yc =4 +c YYB- + II4 RV &
@4 +c
`2bmHi Y4 R II Bc
'
'
'c
'
HQM; HQM;
`2im`M UU/BpB/2M//BpBbQ`V == jRV \ U@`2bmHiV , U`2bmHiVc
2
ff G22i*Q/2- .BpB/2 hrQ AMi2;2`b
ff
PUHQ;MV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
BMi /BpB/2UBMi /BpB/2M/- BMi /BpBbQ`V &
BMi `2bmHi 4 yc ff
/BpB/2M/ 4 ALhnJAL
/BpBbQ` 4 @R
+QMbi #QQH bB;M 4 U/BpB/2M/ = y /BpBbQ` I yV %%
U/BpB/2M/ I y /BpBbQ` = yVc ff
ff
/BpB/2M/ 4 ALhnJAL
@/BpB/2M/
mMbB;M2/ BMi
mMbB;M2/ BMi 4 /BpB/2M/ =4 y \ /BpB/2M/ , @/BpB/2M/c
mMbB;M2/ BMi # 4 /BpBbQ` =4 y \ /BpBbQ` , @/BpBbQ`c
r?BH2 U =4 #V &
BMi KmHiB 4 Rc
mMbB;M2/ BMi ## 4 #c
r?BH2 U =4 ##V &
@4 ##c
`2bmHi Y4 KmHiBc
B7 U## I ALhnJs == RV & ff
## Y4 ##c
KmHiB Y4 KmHiBc
'
'c
'
'
'
B7 UbB;MV `2im`M @`2bmHic
2Hb2 `2im`M `2bmHic
15.14 Text Justification
253
15.14 Text Justification
Given an array of words and a length L, format the text such that each line has exactly L characters and
is fully (left and right) justified.
You should pack your words in a greedy approach; that is, pack as many words as you can in each line.
Pad extra spaces ^ ^ when necessary so that each line has exactly L characters.
Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a
line do not divide evenly between words, the empty slots on the left will be assigned more spaces than the
slots on the right.
For the last line of text, it should be left justified and no extra space is inserted between words.
For example,
words: (]h?Bb]- ]Bb]- ]M]- ]2tKTH2]- ]Q7]- ]i2ti]- ]DmbiB7B+iBQMX])
L: 16.
Return the formatted lines as:
(
]h?Bb
Bb
M]]2tKTH2 Q7 i2ti]]DmbiB7B+iBQMX ]
Note: Each word is guaranteed not to exceed L in length.
Corner Cases:
A line other than the last line might contain only one word. What should you do in this case?
In this case, that line should be left
ff G22i*Q/2- h2ti CmbiB7B+iBQM
ff
PUMV
PURV
+Hbb aQHmiBQM &
Tm#HB+,
p2+iQ`Ibi`BM;= 7mHHCmbiB7vUp2+iQ`Ibi`BM;= rQ`/b- BMi GV &
p2+iQ`Ibi`BM;= `2bmHic
+QMbi BMi M 4 rQ`/bXbBx2UVc
BMi #2;BM 4 y- H2M 4 yc ff
7Q` UBMi B 4 yc B I Mc YYBV &
B7 UH2M Y rQ`/b(B)XbBx2UV Y UB @ #2;BMV = GV &
`2bmHiXTmb?n#+FU+QMM2+iUrQ`/b- #2;BM- B @ R- H2M- G- 7Hb2VVc
254
15
#2;BM 4 Bc
H2M 4 yc
'
H2M Y4 rQ`/b(B)XbBx2UVc
'
f
'
ff
G
`2bmHiXTmb?n#+FU+QMM2+iUrQ`/b- #2;BM- M @ R- H2M- G- i`m2VVc
`2im`M `2bmHic
!#`B27
rQ`/b(#2;BM- 2M/)
!T`K(BM) rQ`/b
!T`K(BM) #2;BM
!T`K(BM) 2M/
!T`K(BM) H2M rQ`/b(#2;BM- 2M/)
!T`K(BM) G
!T`K(BM) BbnHbi
!`2im`M
f
bi`BM; +QMM2+iUp2+iQ`Ibi`BM;= rQ`/b- BMi #2;BM- BMi 2M/BMi H2M- BMi G- #QQH BbnHbiV &
bi`BM; bc
BMi M 4 2M/ @ #2;BM Y Rc
7Q` UBMi B 4 yc B I Mc YYBV &
b Y4 rQ`/b(#2;BM Y B)c
//aT+2bUb- B- M @ R- G @ H2M- BbnHbiVc
'
'
f
'c
!#`B27
X
!T`K(BMQmi)b
!T`K(BM) B
!T`K(BM) M
!T`K(BM) G
!T`K(BM) BbnHbi
!`2im`M
f
pQB/ //aT+2bUbi`BM; b- BMi B- BMi M- BMi G- #QQH BbnHbiV &
B7 UM I R %% B = M @ RV `2im`Mc
BMi bT+2b 4 BbnHbi \ R , UG f M Y UB I UG W MV \ R , yVVc
bXTT2M/UbT+2b- ^ ^Vc
'
B7 UbXbBx2UV I GV bXTT2M/UG @ bXbBx2UV- ^ ^Vc
`2im`M bc
255
15.15 Max Points on a Line
15.15 Max Points on a Line
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
n
n
1
n(n + 1)
2
O(n3 )
key
O(n2 )
O(n)
ff G22i*Q/2- Jt SQBMib QM GBM2
ff
PUMjV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KtSQBMibUp2+iQ`ISQBMi= TQBMibV &
B7 UTQBMibXbBx2UV I jV `2im`M TQBMibXbBx2UVc
BMi `2bmHi 4 yc
'c
value
'
PURV
7Q` UBMi B 4 yc B I TQBMibXbBx2UV @ Rc BYYV &
7Q` UBMi D 4 B Y Rc D I TQBMibXbBx2UVc DYYV &
BMi bB;M 4 yc
BMi - #- +c
B7 UTQBMib(B)Xt 44 TQBMib(D)XtV bB;M 4 Rc
2Hb2 &
4 TQBMib(D)Xt @ TQBMib(B)Xtc
# 4 TQBMib(D)Xv @ TQBMib(B)Xvc
+ 4
TQBMib(B)Xv @ #
TQBMib(B)Xtc
'
BMi +QmMi 4 yc
7Q` UBMi F 4 yc F I TQBMibXbBx2UVc FYYV &
B7 UUy 44 bB;M
TQBMib(F)Xv 44 + Y #
UR 44 bB;MTQBMib(F)Xt 44 TQBMib(D)XtVV
+QmMiYYc
'
B7 U+QmMi = `2bmHiV `2bmHi 4 +QmMic
'
'
`2im`M `2bmHic
TQBMib(F)XtV %%
256
15
ff G22i*Q/2- Jt SQBMib QM GBM2
ff
PUMkV
PUMV
+Hbb aQHmiBQM &
Tm#HB+,
BMi KtSQBMibUp2+iQ`ISQBMi= TQBMibV &
B7 UTQBMibXbBx2UV I jV `2im`M TQBMibXbBx2UVc
BMi `2bmHi 4 yc
mMQ`/2`2/nKTI/Qm#H2- BMi= bHQT2n+QmMic
7Q` UBMi B 4 yc B I TQBMibXbBx2UV@Rc BYYV &
bHQT2n+QmMiX+H2`UVc
BMi bK2SQBMiLmK 4 yc ff
B
BMi TQBMinKt 4 Rc
ff
B
7Q` UBMi D 4 B Y Rc D I TQBMibXbBx2UVc DYYV &
/Qm#H2 bHQT2c ff
B7 UTQBMib(B)Xt 44 TQBMib(D)XtV &
bHQT2 4 bi/,,MmK2`B+nHBKBibI/Qm#H2=,,BM7BMBivUVc
B7 UTQBMib(B)Xv 44 TQBMib(D)XvV &
YY bK2SQBMiLmKc
+QMiBMm2c
'
' 2Hb2 &
bHQT2 4 RXy
UTQBMib(B)Xv @ TQBMib(D)XvV f
UTQBMib(B)Xt @ TQBMib(D)XtVc
'
BMi +QmMi 4 yc
B7 UbHQT2n+QmMiX7BM/UbHQT2V 54 bHQT2n+QmMiX2M/UVV
+QmMi 4 YYbHQT2n+QmMi(bHQT2)c
2Hb2 &
+QmMi 4 kc
bHQT2n+QmMi(bHQT2) 4 kc
'
B7 UTQBMinKt I +QmMiV TQBMinKt 4 +QmMic
'
`2bmHi 4 KtU`2bmHi- TQBMinKt Y bK2SQBMiLmKVc
'c
'
'
`2im`M `2bmHic