Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
CS-Notes
提交
ebb3ce62
C
CS-Notes
项目概览
wushizhenking
/
CS-Notes
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
CS-Notes
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ebb3ce62
编写于
6月 14, 2018
作者:
C
CyC2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
auto commit
上级
849deb6d
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
53 addition
and
24 deletion
+53
-24
notes/Leetcode 题解.md
notes/Leetcode 题解.md
+53
-24
未找到文件。
notes/Leetcode 题解.md
浏览文件 @
ebb3ce62
...
...
@@ -3116,7 +3116,9 @@ the contiguous subarray [4,-1,2,1] has the largest sum = 6.
```
java
public
int
maxSubArray
(
int
[]
nums
)
{
if
(
nums
==
null
||
nums
.
length
==
0
)
return
0
;
if
(
nums
==
null
||
nums
.
length
==
0
)
{
return
0
;
}
int
preSum
=
nums
[
0
];
int
maxSum
=
preSum
;
for
(
int
i
=
1
;
i
<
nums
.
length
;
i
++)
{
...
...
@@ -3142,7 +3144,9 @@ dp[i] 表示以 A[i] 为结尾的等差递增子区间的个数。
```
java
public
int
numberOfArithmeticSlices
(
int
[]
A
)
{
if
(
A
==
null
||
A
.
length
==
0
)
return
0
;
if
(
A
==
null
||
A
.
length
==
0
)
{
return
0
;
}
int
n
=
A
.
length
;
int
[]
dp
=
new
int
[
n
];
for
(
int
i
=
2
;
i
<
n
;
i
++)
{
...
...
@@ -3150,9 +3154,11 @@ public int numberOfArithmeticSlices(int[] A) {
dp
[
i
]
=
dp
[
i
-
1
]
+
1
;
}
}
int
ret
=
0
;
for
(
int
cnt
:
dp
)
ret
+=
cnt
;
return
ret
;
int
total
=
0
;
for
(
int
cnt
:
dp
)
{
total
+=
cnt
;
}
return
total
;
}
```
...
...
@@ -3176,16 +3182,21 @@ public int minDistance(String word1, String word2) {
int
[][]
dp
=
new
int
[
m
+
1
][
n
+
1
];
for
(
int
i
=
0
;
i
<=
m
;
i
++)
{
for
(
int
j
=
0
;
j
<=
n
;
j
++)
{
if
(
i
==
0
||
j
==
0
)
continue
;
dp
[
i
][
j
]
=
word1
.
charAt
(
i
-
1
)
==
word2
.
charAt
(
j
-
1
)
?
dp
[
i
-
1
][
j
-
1
]
+
1
:
Math
.
max
(
dp
[
i
][
j
-
1
],
dp
[
i
-
1
][
j
]);
if
(
i
==
0
||
j
==
0
)
{
continue
;
}
if
(
word1
.
charAt
(
i
-
1
)
==
word2
.
charAt
(
j
-
1
))
{
dp
[
i
][
j
]
=
dp
[
i
-
1
][
j
-
1
]
+
1
;
}
else
{
dp
[
i
][
j
]
=
Math
.
max
(
dp
[
i
][
j
-
1
],
dp
[
i
-
1
][
j
]);
}
}
}
return
m
+
n
-
2
*
dp
[
m
][
n
];
}
```
**
修改一个字符串成为另一个字符串
**
**
编辑距离
**
[
72. Edit Distance (Hard)
](
https://leetcode.com/problems/edit-distance/description/
)
...
...
@@ -3210,6 +3221,8 @@ exention -> exection (replace 'n' with 'c')
exection -> execution (insert 'u')
```
题目描述:修改一个字符串成为另一个字符串,使得修改次数最少。一次修改操作包括:插入一个字符、删除一个字符、替换一个字符。
```
java
public
int
minDistance
(
String
word1
,
String
word2
)
{
if
(
word1
==
null
||
word2
==
null
)
{
...
...
@@ -3248,8 +3261,8 @@ public int minDistance(String word1, String word2) {
public
int
integerBreak
(
int
n
)
{
int
[]
dp
=
new
int
[
n
+
1
];
dp
[
1
]
=
1
;
for
(
int
i
=
2
;
i
<=
n
;
i
++)
{
for
(
int
j
=
1
;
j
<=
i
-
1
;
j
++)
{
for
(
int
i
=
2
;
i
<=
n
;
i
++)
{
for
(
int
j
=
1
;
j
<=
i
-
1
;
j
++)
{
dp
[
i
]
=
Math
.
max
(
dp
[
i
],
Math
.
max
(
j
*
dp
[
i
-
j
],
j
*
(
i
-
j
)));
}
}
...
...
@@ -3270,7 +3283,9 @@ public int numSquares(int n) {
for
(
int
i
=
1
;
i
<=
n
;
i
++)
{
int
min
=
Integer
.
MAX_VALUE
;
for
(
int
square
:
squareList
)
{
if
(
square
>
i
)
break
;
if
(
square
>
i
)
{
break
;
}
min
=
Math
.
min
(
min
,
dp
[
i
-
square
]
+
1
);
}
dp
[
i
]
=
min
;
...
...
@@ -3299,17 +3314,25 @@ private List<Integer> generateSquareList(int n) {
```
java
public
int
numDecodings
(
String
s
)
{
if
(
s
==
null
||
s
.
length
()
==
0
)
return
0
;
if
(
s
==
null
||
s
.
length
()
==
0
)
{
return
0
;
}
int
n
=
s
.
length
();
int
[]
dp
=
new
int
[
n
+
1
];
dp
[
0
]
=
1
;
dp
[
1
]
=
s
.
charAt
(
0
)
==
'0'
?
0
:
1
;
for
(
int
i
=
2
;
i
<=
n
;
i
++)
{
for
(
int
i
=
2
;
i
<=
n
;
i
++)
{
int
one
=
Integer
.
valueOf
(
s
.
substring
(
i
-
1
,
i
));
if
(
one
!=
0
)
dp
[
i
]
+=
dp
[
i
-
1
];
if
(
s
.
charAt
(
i
-
2
)
==
'0'
)
continue
;
if
(
one
!=
0
)
{
dp
[
i
]
+=
dp
[
i
-
1
];
}
if
(
s
.
charAt
(
i
-
2
)
==
'0'
)
{
continue
;
}
int
two
=
Integer
.
valueOf
(
s
.
substring
(
i
-
2
,
i
));
if
(
two
<=
26
)
dp
[
i
]
+=
dp
[
i
-
2
];
if
(
two
<=
26
)
{
dp
[
i
]
+=
dp
[
i
-
2
];
}
}
return
dp
[
n
];
}
...
...
@@ -3367,14 +3390,20 @@ Given the above grid map, return 7. Because the path 1→3→1→1→1 minimizes
```
java
public
int
minPathSum
(
int
[][]
grid
)
{
if
(
grid
.
length
==
0
||
grid
[
0
].
length
==
0
)
return
0
;
if
(
grid
.
length
==
0
||
grid
[
0
].
length
==
0
)
{
return
0
;
}
int
m
=
grid
.
length
,
n
=
grid
[
0
].
length
;
int
[]
dp
=
new
int
[
n
];
for
(
int
i
=
0
;
i
<
m
;
i
++)
{
for
(
int
j
=
0
;
j
<
n
;
j
++)
{
if
(
j
==
0
)
dp
[
0
]
=
dp
[
0
]
+
grid
[
i
][
0
];
// 只能从上侧走到该位置
else
if
(
i
==
0
)
dp
[
j
]
=
dp
[
j
-
1
]
+
grid
[
0
][
j
];
// 只能从右侧走到该位置
else
dp
[
j
]
=
Math
.
min
(
dp
[
j
-
1
],
dp
[
j
])
+
grid
[
i
][
j
];
if
(
j
==
0
)
{
dp
[
0
]
=
dp
[
0
]
+
grid
[
i
][
0
];
// 只能从上侧走到该位置
}
else
if
(
i
==
0
)
{
dp
[
j
]
=
dp
[
j
-
1
]
+
grid
[
0
][
j
];
// 只能从右侧走到该位置
}
else
{
dp
[
j
]
=
Math
.
min
(
dp
[
j
-
1
],
dp
[
j
])
+
grid
[
i
][
j
];
}
}
}
return
dp
[
n
-
1
];
...
...
@@ -3517,11 +3546,11 @@ public int minSteps(int n) {
### 素数
(一)素数分解
**素数分解**
每一个数都可以分解成素数的乘积,例如 84 = 2
<sup>
2
</sup>
\*
3
<sup>
1
</sup>
\*
5
<sup>
0
</sup>
\*
7
<sup>
1
</sup>
\*
11
<sup>
0
</sup>
\*
13
<sup>
0
</sup>
\*
17
<sup>
0
</sup>
\*
…
(二)整除
**整除**
令 x = 2
<sup>
m0
</sup>
\*
3
<sup>
m1
</sup>
\*
5
<sup>
m2
</sup>
\*
7
<sup>
m3
</sup>
\*
11
<sup>
m4
</sup>
\*
…
...
...
@@ -3529,7 +3558,7 @@ public int minSteps(int n) {
如果 x 整除 y(y mod x == 0),则对于所有 i,mi <= ni。
(三)最大公约数最小公倍数
**最大公约数最小公倍数**
x 和 y 的最大公约数为:gcd(x,y) = 2
<sup>
min(m0,n0)
</sup>
\*
3
<sup>
min(m1,n1)
</sup>
\*
5
<sup>
min(m2,n2)
</sup>
\*
...
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录