题目链接:https://leetcode.com/problems/integer-break/description/
思路
动态规划的思想:
dp[1] = 1 dp[2] = 1 dp[3]= 2 dp[4] = 4 dp[5]= 6 dp[6] = 9 dp[7] = 12 dp[8]= 18 dp[9] = 27
动态规划方程:
dp[1] = 1
dp[i] = MAX(dp[i], MAX(dp[j](i-j),i(i-j))
public class LeetCode343 {
/**
* 动态规划的思想:
* dp[1] = 1 dp[2] = 1 dp[3]= 2 dp[4] = 4 dp[5]= 6 dp[6] = 9 dp[7] = 12 dp[8]= 18 dp[9] = 27
* 动态规划方程
* dp[1] = 1
* dp[i] = MAX(dp[i], MAX(dp[j]*(i-j),i*(i-j))
* @param n
* @return
*/
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; j++){
dp[i] = Math.max(dp[i], Math.max(dp[j]*(i-j), j*(i-j)));
}
}
return dp[n];
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new LeetCode343().integerBreak(5));
System.out.println(new LeetCode343().integerBreak(6));
System.out.println(new LeetCode343().integerBreak(7));
System.out.println(new LeetCode343().integerBreak(8));
System.out.println(new LeetCode343().integerBreak(9));
System.out.println(new LeetCode343().integerBreak(10));
}
}
欢迎关注GZ:程序员开发者社区
- https://www.cnblogs.com/xindoo/archive/2013/06/03/3595134.html