個人題解博客https://www.b2bchain.cn/6346.html
數學
//你正在使用一堆木板建造跳水板。有兩種類型的木板,其中長度較短的木板長度爲shorter,長度較長的木板長度爲longer。你必須正好使用k塊木板。編寫一個方
//法,生成跳水板所有可能的長度。
// 返回的長度需要從小到大排列。
// 示例:
// 輸入:
//shorter = 1
//longer = 2
//k = 3
//輸出: {3,4,5,6}
//
// 提示:
//
// 0 < shorter <= longer
// 0 <= k <= 100000
//
// Related Topics 遞歸 記憶化
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int[] divingBoard(int shorter, int longer, int k) {
if(k==0) return new int[]{};
if(shorter==longer) return new int[]{shorter*k};
int[] ans=new int[k+1];
for (int i = 0; i <=k ; i++) {
ans[i]=(k-i)*shorter+i*longer;
}
return ans;
}
}
//leetcode submit region end(Prohibit modification and deletion)
DP
class Solution {
public int[] divingBoard(int shorter, int longer, int k) {
if(k==0) return new int[]{};
if(shorter==longer) return new int[]{shorter*k};
int[] dp=new int[k+1];
//這個地方要乘以k
dp[0]=shorter*k;
for (int i = 1; i <=k ; i++) {
dp[i]=dp[i-1]+longer-shorter;
}
return dp;
}
}