Skip to content

Commit c781c49

Browse files
committed
add 16_11
1 parent 81ed96d commit c781c49

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
| 9 | [Palindrome Number][0009] | Math |
3333
| 13 | [Roman to Integer][0013] | Math, String |
3434
| 14 | [Longest Common Prefix][0014] | String |
35+
| 16.11| [跳水板(Diving Board LCCI)][16_11] | 递归、记忆化 |
3536
| 20 | [Valid Parentheses][0020] | Stack, String |
3637
| 21 | [Merge Two Sorted Lists][0021] | Linked List |
3738
| 26 | [Remove Duplicates from Sorted Array][0026] | Array, Two Pointers |
@@ -121,6 +122,7 @@
121122
[0009]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/0009/README.md
122123
[0013]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/0013/README.md
123124
[0014]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/0014/README.md
125+
[16_11]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/16_11/README.md
124126
[0020]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/0020/README.md
125127
[0021]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/0021/README.md
126128
[0026]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/0026/README.md

note/16_11/README.md

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# [跳水板(Diving Board LCCI)][title]
2+
3+
## 题目描述
4+
5+
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为`shorter`,长度较长的木板长度为`longer`。你必须正好使用`k`块木板。编写一个方法,生成跳水板所有可能的长度。
6+
7+
返回的长度需要从小到大排列。
8+
9+
**示例:**
10+
11+
```
12+
输入:
13+
shorter = 1
14+
longer = 2
15+
k = 3
16+
输出: {3,4,5,6}
17+
```
18+
19+
**提示:**
20+
21+
* 0 < shorter <= longer
22+
* 0 <= k <= 100000
23+
24+
**标签:** 递归、记忆化
25+
26+
27+
## 思路
28+
29+
这题乍一看,好像得用递归或动态规划来解,仔细一想,其实就是高中数学学过的等差数列知识。
30+
31+
`k == 0` 时,返回 `[]` 即可;
32+
33+
`shorter == longer` 时,返回 `[k * shorter]` 即可;
34+
35+
`shorter != longer` 时,那么其实就是一个首项为 `k * shorter`,末项为 `k * longer`,公差为 `longer - shorter` 的等差数列么;
36+
37+
我们根据以上情况就可以写出如下代码了:
38+
39+
40+
```java
41+
public class Solution {
42+
public int[] divingBoard(int shorter, int longer, int k) {
43+
if (k == 0) {
44+
return new int[0];
45+
}
46+
if (shorter == longer) {
47+
return new int[]{shorter * k};
48+
}
49+
int[] ans = new int[k + 1];
50+
int st = k * shorter;// 等差数列的首项
51+
int delta = longer - shorter;// 公差
52+
for (int i = 0; i <= k; i++) {
53+
ans[i] = st + i * delta;
54+
}
55+
return ans;
56+
}
57+
}
58+
```
59+
60+
61+
## 结语
62+
63+
如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-java-leetcode][ajl]
64+
65+
66+
67+
[title]: https://leetcode-cn.com/problems/diving-board-lcci
68+
[ajl]: https://github.com/Blankj/awesome-java-leetcode
+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.blankj.easy._16_11;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* <pre>
7+
* author: Blankj
8+
* blog : http://blankj.com
9+
* time : 2020/07/08
10+
* desc :
11+
* </pre>
12+
*/
13+
public class Solution {
14+
public int[] divingBoard(int shorter, int longer, int k) {
15+
if (k == 0) {
16+
return new int[0];
17+
}
18+
if (shorter == longer) {
19+
return new int[]{shorter * k};
20+
}
21+
int[] ans = new int[k + 1];
22+
int st = k * shorter;// 等差数列的首项
23+
int delta = longer - shorter;// 公差
24+
for (int i = 0; i <= k; i++) {
25+
ans[i] = st + i * delta;
26+
}
27+
return ans;
28+
}
29+
30+
public static void main(String[] args) {
31+
Solution solution = new Solution();
32+
System.out.println(Arrays.toString(solution.divingBoard(1, 2, 3)));
33+
}
34+
}

0 commit comments

Comments
 (0)