面试题14- I. 剪绳子

题目:

面试题14- I. 剪绳子
343. 整数拆分
面试题14- I. 剪绳子_第1张图片

题解:

1. 题解一:(数学推导 / 贪心思想)

面试题14- I. 剪绳子_第2张图片
面试题14- I. 剪绳子_第3张图片
面试题14- I. 剪绳子_第4张图片

2. 题解二:动态规划

面试题14- I. 剪绳子_第5张图片
面试题14- I. 剪绳子_第6张图片
面试题14- I. 剪绳子_第7张图片
面试题14- I. 剪绳子_第8张图片
面试题14- I. 剪绳子_第9张图片

代码:

1. 代码一:(数学推导 / 贪心思想)

import java.util.*;

public class 面试题14_1 {

    public static int cuttingRope(int n) {
        if(n <= 3)
        {
            return n - 1;
        }
        int a = n / 3;
        int b = n % 3;
        if(b == 0)
        {
            return (int)Math.pow(3, a);
        }
        if(b == 1)
        {
            return (int)Math.pow(3, a - 1) * 4;
        }
        if(b == 2)
        {
            return (int)Math.pow(3, a) * 2;
        }
        return 0;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt())
        {
            int n = sc.nextInt();
            int res = cuttingRope(n);
            System.out.println(res);
        }
    }
    
}

2. 代码二:动态规划:

import java.util.*;

public class 面试题14_1 {

    public static int cuttingRope(int n) {
        if(n < 2)
        {
            return 0;
        }
        int dp[] = new int[n + 1];
        dp[2] = 1;
        for(int i = 3; i <= n; i++)
        {
            for(int j = 1; j < i; j++)
            {
                dp[i] = Math.max(dp[i], Math.max((i - j) * j, dp[i - j] * j));
            }
        }
        return dp[n];
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt())
        {
            int n = sc.nextInt();
            int res = cuttingRope(n);
            System.out.println(res);
        }
    }
    
}

参考:

  1. 面试题14- I. 剪绳子(数学推导 / 贪心思想,清晰图解)
  2. 图解【暴力递归】【记忆化技术】【动态规划】【动态规划优化解法】【找规律】
  3. 两种动态规划和贪心思路
  4. 【双解法】动态规划+贪心法(附找规律思路+数学原理参考)
  5. 【C++ 神奇的结论】思路非常好理解 时间复杂度O(n)
  6. 【剪绳子】动态规划
  7. 343. 整数拆分(数学推导,清晰图解)
  8. 【双解法】动态规划+贪心法(附找规律思路+数学原理参考)
  9. 暴力搜索->记忆化搜索->动态规划
  10. 整数拆分 - 数学方法(含完整推导),Java - 0ms
  11. “贪心选择”性质的简单证明、记忆化搜索、动态规划 (Python、Java)

你可能感兴趣的:(剑指Offer)