Skip to content

Commit 2196936

Browse files
committed
添加新题目
1 parent 8c612cc commit 2196936

21 files changed

+833
-4
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
- LeetCode**第二多的官方认证精选题解**,通过手写演算和绘画让算法更易理解。
1111
- 文章首发于微信公众号「[牧码啦](https://i.loli.net/2019/05/20/5ce23b33cc01d73486.gif)」,您可以关注后获取文章更新。
1212
- 每日更新一题,**欢迎关注后加入天天算法群**,一起打卡学算法。
13-
- 文章发布公众号后,会同步更新[力扣](https://leetcode-cn.com/)题解和本项目的[在线阅读](https://guanpengchn.github.io/LeetCodeDrawing/)
13+
- 文章发布公众号后,会同步更新[力扣](https://leetcode-cn.com/)题解和本项目的[在线阅读](https://guanpengchn.github.io/LeetCodeDrawing/)
1414

1515
<div align="center">
1616
<img width="400" src="./img/erweima.gif"/>
@@ -33,7 +33,8 @@
3333
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
3434
|||||||[152](https://mp.weixin.qq.com/s/FvA_wcLq4JU70nXK6lrFHA)|
3535
|[171](https://mp.weixin.qq.com/s/jC4BsJ5r6QixdnwTIchTQw)|[16](https://mp.weixin.qq.com/s/IBEJdeU6G-sBSMuv02LrHg)|[24](https://mp.weixin.qq.com/s/_bjKxIrmtwU0IPtyWtKd_g)|[2](https://mp.weixin.qq.com/s/8cMt_Yaeu6AT5jk3DhdhqA)|[3](https://mp.weixin.qq.com/s/O-2CdSJTFWodVZzGYAjGrA)|[7](https://mp.weixin.qq.com/s/wwn4KOz_VBA1l2q6CHPdtA)|[9](https://mp.weixin.qq.com/s/hoBYW2m7oQ2h0UfwVjT5Hw)|
36-
|[19](https://mp.weixin.qq.com/s/qsElRxU6qJML9KQ3nWw9Yg)|[35](https://mp.weixin.qq.com/s/UnuRk-TT133I2OMxuD1hNg)|
36+
|[19](https://mp.weixin.qq.com/s/qsElRxU6qJML9KQ3nWw9Yg)|[35](https://mp.weixin.qq.com/s/UnuRk-TT133I2OMxuD1hNg)|[83](https://mp.weixin.qq.com/s/7UxM724dL7vEJFXeIT9b2w)|[14](https://mp.weixin.qq.com/s/zq2I1cx_VWrYmlI9wPsDHg)|[13](https://mp.weixin.qq.com/s/DiFy1kwEtI6hmnLnRF9bNg)|[21](https://mp.weixin.qq.com/s/5tOZRIAJZIMHnh06CemWyQ)|[53](https://mp.weixin.qq.com/s/rhnpS2vdv6P8D_JND_cLLQ)|
37+
3738

3839
## 精选题解
3940

docs/.vuepress/config.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,16 @@ const algorithmArr = [
55
'2',
66
'3',
77
'7',
8+
'9',
9+
'14',
810
'16',
11+
'19',
12+
'21',
913
'24',
14+
'35',
15+
'53',
1016
'77',
17+
'83',
1118
'96',
1219
'101',
1320
'112',
@@ -30,6 +37,7 @@ const javaArr = [
3037

3138
const openArr = [
3239
'',
40+
'durantG5',
3341
'mdnice',
3442
'muma',
3543
'futureHistory',

docs/.vuepress/dist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Subproject commit 7718cfadd617ee38e05e1a45a0469073564ae148
1+
Subproject commit ebbc46fb9816239b03b204c1fa87c69308f8cc0c

docs/algorithm/13.md

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# 画解算法:13. 罗马数字转整数
2+
3+
## 题目链接
4+
5+
https://leetcode-cn.com/problems/roman-to-integer/
6+
7+
## 题目描述
8+
9+
罗马数字包含以下七种字符: `I`, `V`, `X`, `L``C``D` 和 `M`
10+
11+
```bash
12+
字符 数值
13+
I 1
14+
V 5
15+
X 10
16+
L 50
17+
C 100
18+
D 500
19+
M 1000
20+
```
21+
22+
例如, 罗马数字 `2` 写做 `II` ,即为两个并列的 `1``12` 写做 `XII` ,即为 `X` + `II` 。 `27` 写做  `XXVII`, 即为 `XX + V + II` 。
23+
24+
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 `4` 不写做 `IIII`,而是 `IV`。数字 `1` 在数字 `5` 的左边,所表示的数等于大数 `5` 减小数 `1` 得到的数值 `4` 。同样地,数字 `9` 表示为 `IX`。这个特殊的规则只适用于以下六种情况:
25+
26+
`I` 可以放在 `V` (5) 和 `X` (10) 的左边,来表示 `4``9`
27+
`X` 可以放在 `L` (50) 和 `C` (100) 的左边,来表示 `40` 和 `90`。 
28+
`C` 可以放在 `D` (500) 和 `M` (1000) 的左边,来表示 `400` 和 `900`
29+
给定一个罗马数字,将其转换成整数。输入确保在 `1` 到 `3999` 的范围内。
30+
31+
示例 1:
32+
33+
```bash
34+
输入: "III"
35+
输出: 3
36+
```
37+
38+
示例 2:
39+
40+
```bash
41+
输入: "IV"
42+
输出: 4
43+
```
44+
45+
示例 3:
46+
47+
```bash
48+
输入: "IX"
49+
输出: 9
50+
```
51+
52+
示例 4:
53+
54+
```bash
55+
输入: "LVIII"
56+
输出: 58
57+
解释: L = 50, V= 5, III = 3.
58+
```
59+
60+
示例 5:
61+
62+
```bash
63+
输入: "MCMXCIV"
64+
输出: 1994
65+
解释: M = 1000, CM = 900, XC = 90, IV = 4.
66+
```
67+
68+
## 解题方案
69+
70+
### 思路
71+
72+
- 标签:哈希表
73+
- 首先将所有的组合可能性列出并添加到哈希表中
74+
- 然后对字符串进行遍历,由于组合只有两种,一种是1个字符,一种是2个字符,其中2个字符优先于1个字符
75+
- 先判断两个字符的组合在哈希表中是否存在,存在则将值取出加到结果ans中,并向后移2个字符。不存在则将判断当前1个字符是否存在,存在则将值取出加到结果ans中,并向后移1个字符
76+
- 遍历结束返回结果ans
77+
78+
79+
### 代码
80+
81+
- Java版本
82+
83+
```java
84+
class Solution {
85+
public int romanToInt(String s) {
86+
Map<String, Integer> map = new HashMap<>();
87+
map.put("I", 1);
88+
map.put("IV", 4);
89+
map.put("V", 5);
90+
map.put("IX", 9);
91+
map.put("X", 10);
92+
map.put("XL", 40);
93+
map.put("L", 50);
94+
map.put("XC", 90);
95+
map.put("C", 100);
96+
map.put("CD", 400);
97+
map.put("D", 500);
98+
map.put("CM", 900);
99+
map.put("M", 1000);
100+
101+
int ans = 0;
102+
for(int i = 0;i < s.length();) {
103+
if(i + 1 < s.length() && map.containsKey(s.substring(i, i+2))) {
104+
ans += map.get(s.substring(i, i+2));
105+
i += 2;
106+
} else {
107+
ans += map.get(s.substring(i, i+1));
108+
i ++;
109+
}
110+
}
111+
return ans;
112+
}
113+
}
114+
```
115+
116+
- JavaScript版本
117+
118+
```js
119+
/**
120+
* @param {string} s
121+
* @return {number}
122+
*/
123+
var romanToInt = function(s) {
124+
const map = {
125+
I : 1,
126+
IV: 4,
127+
V: 5,
128+
IX: 9,
129+
X: 10,
130+
XL: 40,
131+
L: 50,
132+
XC: 90,
133+
C: 100,
134+
CD: 400,
135+
D: 500,
136+
CM: 900,
137+
M: 1000
138+
};
139+
let ans = 0;
140+
for(let i = 0;i < s.length;) {
141+
if(i + 1 < s.length && map[s.substring(i, i+2)]) {
142+
ans += map[s.substring(i, i+2)];
143+
i += 2;
144+
} else {
145+
ans += map[s.substring(i, i+1)];
146+
i ++;
147+
}
148+
}
149+
return ans;
150+
};
151+
```
152+
153+
### 画解
154+
155+
![fr&lt;x&gt;ame_00001.png](https://i.loli.net/2019/06/13/5d019b1b6eede62332.png)
156+
![fr&lt;x&gt;ame_00002.png](https://i.loli.net/2019/06/13/5d019b1b623c757664.png)
157+
![fr&lt;x&gt;ame_00003.png](https://i.loli.net/2019/06/13/5d019b1b62cd552075.png)
158+
![fr&lt;x&gt;ame_00004.png](https://i.loli.net/2019/06/13/5d019b1b75f4b75474.png)
159+
![fr&lt;x&gt;ame_00005.png](https://i.loli.net/2019/06/13/5d019b1b65a5b82588.png)
160+
161+
162+
<span style="display:block;text-align:center;">后台回复「<strong>算法</strong>」,加入天天算法群</span>
163+
<span style="display:block;text-align:center;">觉得算法直击灵魂,欢迎点击<strong>在看</strong>和<strong>转发</strong></span>
164+
165+
![](https://i.loli.net/2019/05/20/5ce23b33cc01d73486.gif)

docs/algorithm/14.md

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# 画解算法:14. 最长公共前缀
2+
3+
## 题目链接
4+
5+
https://leetcode-cn.com/problems/longest-common-prefix/
6+
7+
## 题目描述
8+
9+
编写一个函数来查找字符串数组中的最长公共前缀。
10+
11+
如果不存在公共前缀,返回空字符串 ""。
12+
13+
示例 1:
14+
15+
```bash
16+
输入: ["flower","flow","flight"]
17+
输出: "fl"
18+
```
19+
20+
示例 2:
21+
22+
```bash
23+
输入: ["dog","racecar","car"]
24+
输出: ""
25+
解释: 输入不存在公共前缀。
26+
```
27+
28+
**说明:**
29+
30+
所有输入只包含小写字母 `a-z` 。
31+
32+
## 解题方案
33+
34+
### 思路
35+
36+
- 标签:字符串
37+
- 当字符串数组长度为0时则公共前缀为空,直接返回
38+
- 令最长公共前缀ans的值为第一个字符串,进行初始化
39+
- 遍历后面的字符串,依次将其与ans进行比较,两两找出公共前缀,最终结果即为最长公共前缀
40+
- 如果查找过程中出现了ans为空的情况,则公共前缀不存在直接返回
41+
- 时间复杂度:O(s),s为所有字符串的长度之和
42+
43+
44+
### 代码
45+
46+
- Java版本
47+
48+
```java
49+
class Solution {
50+
public String longestCommonPrefix(String[] strs) {
51+
if(strs.length == 0)
52+
return "";
53+
String ans = strs[0];
54+
for(int i =1;i<strs.length;i++) {
55+
int j=0;
56+
for(;j<ans.length() && j < strs[i].length();j++) {
57+
if(ans.charAt(j) != strs[i].charAt(j))
58+
break;
59+
}
60+
ans = ans.substring(0, j);
61+
if(ans.equals(""))
62+
return ans;
63+
}
64+
return ans;
65+
}
66+
}
67+
```
68+
69+
- JavaScript版本
70+
71+
```js
72+
/**
73+
* @param {string[]} strs
74+
* @return {string}
75+
*/
76+
var longestCommonPrefix = function(strs) {
77+
if(strs.length == 0)
78+
return "";
79+
let ans = strs[0];
80+
for(let i =1;i<strs.length;i++) {
81+
let j=0;
82+
for(;j<ans.length && j < strs[i].length;j++) {
83+
if(ans[j] != strs[i][j])
84+
break;
85+
}
86+
ans = ans.substr(0, j);
87+
if(ans === "")
88+
return ans;
89+
}
90+
return ans;
91+
};
92+
```
93+
94+
### 画解
95+
96+
![fr&lt;x&gt;ame_00001.png](https://i.loli.net/2019/06/12/5d0053635318868680.png)
97+
![fr&lt;x&gt;ame_00002.png](https://i.loli.net/2019/06/12/5d0053635f0fd95479.png)
98+
![fr&lt;x&gt;ame_00003.png](https://i.loli.net/2019/06/12/5d0053635329834163.png)
99+
![fr&lt;x&gt;ame_00004.png](https://i.loli.net/2019/06/12/5d0053636827e83266.png)
100+
![fr&lt;x&gt;ame_00005.png](https://i.loli.net/2019/06/12/5d0053631e5b433775.png)
101+
102+
<span style="display:block;text-align:center;">后台回复「<strong>算法</strong>」,加入天天算法群</span>
103+
<span style="display:block;text-align:center;">觉得算法直击灵魂,欢迎点击<strong>在看</strong>和<strong>转发</strong></span>
104+
105+
![](https://i.loli.net/2019/05/20/5ce23b33cc01d73486.gif)

0 commit comments

Comments
 (0)