面試題 16.11. 跳水板 數學或者DP

個人題解博客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;

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章