Leetcode CPP
Leetcode CPP
(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
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
Java
2.1
. . . . . . . . . . . . . . .
2.1.1
Remove
Duplicates
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
37
38
. . . . . . . . . . . . .
40
2.2.1
40
2.2.2
41
2.2.3
Partition List . . . . . .
42
2.2.4
Remove
2.2.5
Sequence . . . . . . . .
Duplicates
2.1.6
Rotated
Sorted Array II . . . . .
33
2.2
Rotated
Sorted Array . . . . . .
2.1.4
Duplicates
13
Remove
43
Duplicates
44
2.2.6
Rotate List . . . . . . .
46
2.2.7
Remove
Nth
Node
47
2.2.8
47
2.2.9
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
51
52
53
55
23
24
27
28
3.1
Valid Palindrome . . . . . . . .
57
3.2
Implement strStr() . . . . . . . .
58
3.3
60
31
ii
57
iii
3.4
Add Binary . . . . . . . . . . .
61
3.5
3.6
66
3.7
Wildcard Matching . . . . . . .
67
3.8
3.9
Valid Number . . . . . . . . . . 70
5.1.5
5.1.6
Binary
Tree
Zigzag
94
96
98
99
72
5.1.8
Same Tree . . . . . . .
73
5.1.9
3.13 Anagrams . . . . . . . . . . . .
75
77
79
4.1
. . . . . . . . . . . . . . . .
. . . . . . . . . 106
5.2.1
79
4.1.1
Valid Parentheses . . . . 79
4.1.2
theses . . . . . . . . . . 80
4.1.3
4.1.4
82
5.3
4.2
Largest Rectangle in
Histogram . . . . . . . .
. . . . . . . . . . . 108
5.3.1
84
5.3.2
86
5.1
5.1.2
5.3.4
Tree . . . . . . . . . . . 111
86
5.3.5
5.1.4
5.1.3
5.3.3
90
. . . . . . . . . 86
5.1.1
. . . . . . . . . . . . . . . 85
5.4
. . . . . . . . . 114
5.4.1
92
iv
5.4.2
8.3.2
next_permu-
tation() . . . . . . . . . 142
8.3.3
5.4.3
5.4.4
5.4.5
8.4.1
8.4.2
5.4.6
8.4
next_permutation() . . . 144
next_permutation() . . . . . . . . . 144
8.4.3
8.5
Permutations II . . . . . . . . . 144
5.4.7
. . . . . . . . . . 143
123
8.6
. . . . . . . . . . 144
Combinations . . . . . . . . . . 146
8.5.1
. . . . . . . . . . 146
8.5.2
. . . . . . . . . . 147
6.1
Number . . . . . . . . . . . . . 147
6.2
8.6.1
. . . . . . . . . . 148
6.3
8.6.2
. . . . . . . . . . 149
6.4
6.5
6.6
6.7
131
7.1
7.2
7.3
8
8.1
8.2
8.3
135
Subsets . . . . . . . . . . . . . 135
150
9.1
9.2
9.3
9.4
. . . . . . . . . . . . . . . 164
9.4.1
. . . . . . . . 164
9.4.2
. . . . . . 164
9.4.3
. . . . . . . . 165
10
173
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
Permutations . . . . . . . . . . 142
10.3.1
. . . . . . . . 179
8.3.1
10.3.2
. . . . . . . . . . 180
next_permutation() . . . 142
v
10.4 N-Queens . . . . . . . . . . . . 181
III . . . . . . . . . . . . . . . . 214
10.12
. . . . . . . . . . . . . . 195
10.12.1
. . . . . . . 195
10.12.2
. . . . . . 195
10.12.3
. . . . . . . 197
10.12.4
. 197
10.12.5
. . 197
11
199
14
232
235
201
12
13
209
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
'c
'
`2im`M QmiTmic
2.1.2
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`
'c
'
MmKb(BM/2tYY) 4 MmKb(B)c
'
`2im`M BM/2tc
2.1.1
2.1
2.1.4
&
f kc
I MmKb(KB/)V
MmKb(Hbi@R)V
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
2.1
2.1.3
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)
'
'c
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/
'c
'
`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
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)
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
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 )
14
'
'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.
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
'
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
'
'c
'
'
'
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
'
Two sum,
3Sum,
2.1.7
2.1.8
3Sum Closest,
2.1.9
18
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
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
'c
'
`2im`M i`m2c
Permutation Sequence,
Permutations,
Permutations II,
Combinations,
8.3
8.4
8.5
2.1.13
21
2.1
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
'
'
`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
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^.
Rules
24
'
'
'
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
'c
'
Sudoku Solver,
10.10
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
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
'
/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
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
12.6
4.1.3
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
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
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
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
1
an =
5
!"
#n "
#n $
1+ 5
1 5
2
2
31
2.1
Decode Ways,
13.10
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
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
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?
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
'c
'
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
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
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+ 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
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
2.1.24
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
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
41
2.2
'c
'
Add Binary,
3.4
15
bug free
42
'
'c
`2im`M /mKKvXM2tic
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.
43
2.2
'
'c
`2im`M H27in/mKKvXM2tic
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.
?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
'
+m`V &
?2/
44
'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
2.2.5
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.
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
'
'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
2.2.4
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
'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
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
'
'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
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
'c
'
'c
'
`2im`M ?2/c
2.2.9
49
2.2
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
'c
'
50
'c
`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
'
2.2.8
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
'
'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
52
O(N )
O(1)
http://leetcode.com/2010/09/detecting-loop-in-singly-linked-list.html
2.2.12
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
'c
'
'
'
`2im`M MmHHTi`c
2.2.11
Ln1 L2 Ln2
54
in-place
O(1)
reverse
'
'c
'
55
2.2
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
hash
56
'
ff
KT
++?2GBbiXbTHB+2U++?2GBbiX#2;BMUV- ++?2GBbi- ++?2JT(F2v)Vc
++?2JT(F2v) 4 ++?2GBbiX#2;BMUVc
`2im`M ++?2JT(F2v)@=pHm2c
57
58
Palindrome Number,
15.2
Rabin-Karp
O(m n)
KMP
Boyer-Mooer
BUG
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
'
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
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
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
'
!#`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
'
'
7`22UM2tiVc
`2im`M @Rc
60
'c
3.3
1.
-3924x8fc
2.
++c, ++1
3.
2147483648
+ 413,
61
'c
'
Implement strStr()
3.2
62
2.2.1
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
f (i, j) =
7UB-DV
[i,j]
true
,i = j
S[i] = S[j]
Manacher s Algorithm,
O(n)
,j = i + 1
,j > i + 1
http://leetcode.com/2011/11/longest-
palindromic-substring-part-ii.html
7B`bi 44
T`2pUHbiVV
64
'
'c
'
'c
'
&
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
'
`2i Y4 ]O0]c
`2im`M `2ic
h(B)
'
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
'
'c
'
66
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
67
'c
'
'
Wildcard Matching,
3.7
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
PUM5 K5V
+Hbb aQHmiBQM &
Tm#HB+,
PUMV
^ ^
68
'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
69
'c
'
3.6
'c
'
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;,,()
bi`iQ/UV
PUMV
71
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
73
'c
'
'
`2im`M `QKMc
Roman to Integer,
3.11
Ao 4 8 R
oA 4 8 Y R- AA4RYR
74
'
'c
'
`2bmHi Y4 KTUb(B)Vc
'
`2im`M `2bmHic
Integer to Roman,
3.10
`2im`M bc
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
^fff^
/B`
'
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
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
'
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.
79
80
'c
'
`2im`M biFX2KTivUVc
Generate Parentheses,
10.9
4.1.2
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.
81
4.1
'
'c
'
'
'
'
`2im`M KtnH2Mc
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
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
83
4.1
4-2
The largest rectangle is shown in the shaded area, which has area = 10 unit.
i=4
3
3
3
4
84
'c
'
Some examples:
(]k]- ]R]- ]Y]- ]j]- ] ]) @= UUk Y RV
jV @= N
(]9]- ]Rj]- ]8]- ]f]- ]Y]) @= U9 Y URj f 8VV @= e
85
4.2
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)
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
'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
5.1.2
5.1.3
5.1.7
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
89
5.1
'c
'
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
5.1.1
5.1.3
5.1.7
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
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
'
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
'
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
5.1.1
5.1.2
5.1.7
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)
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
94
5
B7U`QQi 44 MmHHTi`V &
`2im`M `2bmHic
' 2Hb2 &
+m``2MiXTmb?U`QQiVc
'
'c
'
5.1.5
5.1.6
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
`2im`M `2bmHic
'
pQB/ i`p2`b2Uh`22LQ/2
B7 U5`QQiV `2im`Mc
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
`QQiV &
96
5
H2p2HX+H2`UVc
brTUM2ti- +m``2MiVc
'c
'
'
`2p2`b2U`2bmHiX#2;BMUV- `2bmHiX2M/UVVc ff
`2im`M `2bmHic
5.1.4
5.1.6
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
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
'
'
98
'c
5.1.4
5.1.5
O(n)
Morris
O(n)
PURV
+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
5.1.2
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.
PUHQ;MV
T- h`22LQ/2
[V &
100
'c
'
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
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
'
bXTmb?UT@=`B;?iVc
bXTmb?U[@=H27iVc
`2im`M i`m2c
ff
ff
102
5
'
'c
Same Tree
5.1.8
'c
'
ff
103
5.1
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
'
'c
'
'
T@=H27i 4 MmHHTi`c
B7 U5bX2KTivUVV
T@=`B;?i 4 bXiQTUVc
105
5.1
106
5
T`2p@=M2ti 4 +m``@=`B;?ic
T`2p 4 T`2p@=M2tic
'
'c
'
'
+QMM2+iU/mKKvXM2tiVc
'
'c
'
'
`QQi 4 M2tic ff im`M iQ M2ti H2p2H
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
'c
'
`2im`M `QQic
5.2.2
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
'
'c
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)
[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)
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
5.3.2
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
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
5.3.1
112
'c
'
5.3.3
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
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
5.3.5
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
O(n log n)
`2im`M `QQic
MQ/2V &
114
5
'
'
`2im`M Mc
'c
'
`2im`M MQ/2c
'c
'
5.4
5.3.4
115
5.4
10.12.5
DFS
3
3! = 6
`QQi@=`@=H
`@=`QQi@=H- `@=H@=`QQi
'c
'
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
'
`2im`M `2bmHic
5.4.2
'c
'
117
5.4
5.4.1
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
'c
'
Path Sum II
5.4.4
118
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)
return
119
5.4
'
'c
+m`XTQTn#+FUVc
Path Sum
5.4.3
13.2
Array
Binary Tree
Array
Binary Tree
dfs
L
L
R
Binary Tree
L
0
R
120
'c
'
return
L->root->R
L->root
R->root
Maximum Subarray
13.2
121
5.4
'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
5.1.12
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
'c
'
6.2
6.3
123
124
6.3
6.2
125
'
'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
6.2
126
'
'c
?2/V &
Sort List,
6.5
O(nlogn)
Two Sorted Lists
PURV
Merge
127
'
'c
GBbiLQ/2 HR 4 bQ`iGBbiU?2/Vc
GBbiLQ/2 Hk 4 bQ`iGBbiUbHQrVc
`2im`M K2`;2hrQGBbibUHR- HkVc
ff
ff
6.4
128
(bucket sort)
(B)54 BYR
A[i]
A[A[i]-1]
(B)44 ((B)@R)
'
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
129
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
6.6
STL
lower_bound
upper_bound
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 UpHm2 =
2Hb2
KB/V
7B`bi 4 YYKB/c
Hbi 4 KB/c
`2im`M 7B`bic
'
'c
'
B7 UpHm2 =4
2Hb2
KB/V
7B`bi 4 YYKB/c
Hbi 4 KB/c
ff
HQr2`n#QmM/
`2im`M 7B`bic
7.2
133
bi/,,HQr2`n#QmM/UV
'
'c
'
B7 UpHm2 =
2Hb2
KB/V
7B`bi 4 YYKB/c
Hbi 4 KB/c
`2im`M 7B`bic
7.1
properties:
134
7
For example, Consider the following matrix:
'
'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
'
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
'
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
'
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
'
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
'
'
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
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
'
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
'
'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
147
148
8-1
Phone Keyboard
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
'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
BVc
A*
150
151
PUMV
'c
152
'
'c
'
B7 Ubii2nBbnpHB/UM2rnbii2V
pBbBi2/X7BM/UM2rnbii2V 44 pBbBi2/X2M/UVV &
`2bmHiXBMb2`iUM2rnbii2Vc
'
brTU+- M2rnbii2XrQ`/(B)Vc ff
`2im`M `2bmHic
'c
'
'
`2im`M yc
ff
153
'
'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
(]?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
PUMV
155
'c
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
'c
'
ff
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
'
'
'
+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
'c
'
/B+i
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
'
'
'
T`Bpi2,
bi`m+i bii2ni &
bii2ni 7i?2`c
bi`BM; rQ`/c
BMi H2p2Hc ff
'c
bii2ni
161
MQ/2V &
'
`2p2`b2UTi?X#2;BMUV- Ti?X2M/UVVc
`2im`M Ti?c
'
'c
'
'
'
`2im`M /D+2M+vnHBbic
Word Ladder
9.1
162
s
P
s
P
s
P
P
s
s
s
s
s
s
s
s
P
s
s
s
s
s
s
s
s
^P^
'
T`Bpi2,
pQB/ #7bUp2+iQ`Ip2+iQ`I+?`== #Q`/- BMi B- BMi DV &
'c
'
`2im`M `2bmHic
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
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
'
?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
'
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
'
'
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
'
`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
'
'
'
'
+m``2MiX+H2`UVc
brTU+m``2Mi- M2tiVc
`2im`M `2bmHic
bfs_template.cpp
10
(]]-]#])(]]-]]-]#])
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
'
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
'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
'
'c
'
Palindrome Partitioning II
13.3
176
10
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
'c
'
10.2.2
177
'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)
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
'
'c
m1
m+n2
M =4 R
Unique Paths II
Minimum Path Sum,
10.3
13.8
179
10.3.1
'
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
'c
'
Unique Paths
10.2
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
(]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
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
'
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
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
185
10.5 N-Queens II
'
'
f
'c
!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
'c
'
N-Queens
10.4
187
!#`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
@ 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
'c
'
'
B7 UMmK 44 yV #`2Fc
ff
188
10
For example, given candidate set k-j-e-d and target d, A solution set is:
(d)
(k- k- j)
`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
'c
Combination Sum II
10.8
d)
k- 8)
e)
R- e)
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
<n
1
ff G22i*Q/2- :2M2`i2 S`2Mi?2b2b
ff
PUhP.PV
PUMV
+Hbb aQHmiBQM &
191
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
193
Valid Sudoku,
2.1.14
194
10
For example, Given board =
(]"*1])(]a6*a])(].11])
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
??
1968
top-down
memorization
rization
(iterative)
memorization
memorization
memorization
memo-
11
11.1 Pow(x,n)
Implement pow(x, n).
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
'
Pow(x)
11.1
12
(B)
0
0
7(B)
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
'
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
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
'c
'
m=1
205
12.4
13.5
12.3
13.5
m=
206
12
BM/2tYR
12-1
O(n)
12-1
@R
207
'
'c
ff
]#+/]
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)
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
SubArray
2.
SubArray
SubArray
SubArray
SubArray
SubArray
7(D)
a(D)
f [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
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
5.4.5
212
13
7UB-DV
(B-D)
cut
(B- M@R)
DP
+mi
DP
213
'c
'
'
`2im`M 7(y)c
Palindrome Partitioning
10.1
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
f (i)
g(i)
https://gist.github.com/soulmachine/5906637
215
'c
'
`2im`M KtnT`Q7Bic
12.3
12.4
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
s1
s3
216
13
'
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
'
'c
'
`2im`M 7(bRXH2M;i?UV)(bkXH2M;i?UV)c
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
`2im`M 7(bkXH2M;i?UV)c
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
ff
PUMeV
+Hbb aQHmiBQM &
KT
7(M)(B)(D)
PURV
mMQ`/2`2/nKT
n
219
7B`biR 44
7B`bikc
'c
'
`2im`M 7Hb2c
bR(B)
b+`K#H2
L
L- 7Hb2Vc
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
221
7B`biR 44
7B`bikc
`2im`M 7Hb2c
'c
'
'c
'
'
HbiRc
7B`bikc
UM2tiU7B`bik- /BbiM+2U7B`biR- HbiRV@RVVc
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
`2im`M 7Hb2c
'
'c
Note: You can only move either down or right at any point in time
Unique Paths (
10.2)
223
(0, 0)
(i, j)
7(B)(D)4KBMU7(B@R)(D)- 7(B)(D@R)VY;`B/(B)(D)
'
'c
&
;`B/(B)(y)c
&
;`B/(y)(B)c
224
13
'
'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
Unique Paths,
Unique Paths II,
10.2
10.3
225
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
'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)
'
'
'c
'
mTT2`nH27i 4 mTT2`c
`2im`M 7(rQ`/kXH2M;i?UV)c
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)
'c
'
'
`2im`M +m`c
Climbing Stairs,
2.1.18
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)
'c
`2im`M 7(hXbBx2UV)c
229
f (i)
b(y-B)
f (i) = any_of (f (j)&&s[j + 1, i] dict), 0 j < i
230
13
13.13
231
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
232
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
'
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
PURV
U
235
t 4 @kR9d93je93U
@kjRV V
236
15
7Q` Uc ic i f4 RyV
` 4 `
Ry Y i W Ryc
'c
'
Palindrome Number,
15.2
Palindrome
reverse()
10
237
'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
(R-k)-(j-Ry)-(Rk-Re).
This is because the new interval (9-N) overlaps with (j-8)-(e-d)-(3-Ry).
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
Insert Intervals
interval
interval
239
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
240
15
If there are multiple such windows, you are guaranteed that there will always be only one unique
minimum window in S.
'
ff
241
'
'c
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
242
15
`2im`M xc
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
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
'
'
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
'
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)
'
'
'
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
245
'c
B7 U@@TQb@=b2+QM/ 44 yV mMmb2/X2`b2UTQbVc
`2im`M `2bmHic
(R)(R-R)(R-k-R)(R-j-j-R)(R-9-e-9-R)
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
'c
'
'
`2im`M `2bmHic
Pascals Triangle II
15.9
247
Pascals Triangle
15.8
( R- k- j )( 9- 8- e )( d- 3- N )
248
15
Spiral Matrix II
15.11
( R- k- j )( 3- N- 9 )( d- e- 8 )
249
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
'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
'c
'
'
`2im`M Ki`Btc
Spiral Matrix,
15.10
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
k)Vc
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;
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
253
]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
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
'
255
n
n
1
n(n + 1)
2
O(n3 )
key
O(n2 )
O(n)
'c
value
'
PURV
TQBMib(F)XtV %%
256
15
'c
'
'
`2im`M `2bmHic