• LeetCode Perfect Squares


    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16,
    ...) which sum to n. For example, given n = 12 , return 3 because 12 = 4 + 4 + 4 ; given n =
    13 , return 2 because 13 = 4 + 9 .

    题目翻译: 给出一个正整数 n ,求至少需要多少个完全平方数(例如1,4,9,16……)相加能得到n。
    例如,给出 n = 12 ,返回3,因为 12 = 4 + 4 + 4 。给出 n = 13 ,返回2,因为 13 = 4 + 9 。

    具体来说,我们用一个数组来记录已有的结果,初始化为正无穷( INT_MAX )。外层循环变量 i 从 0 到 n ,
    内层循环变量 j 在 i 的基础上依次加上每个整数的完全平方,超过 n 的不算。那么 i + j*j 这个数需要
    的最少的完全平方数的数量,就是数组中当前的数值,和 i 位置的数值加上一,这两者之间较小的数字。
    如果当前的值较小,说明我们已经找到过它需要的完全平方数的个数(最初都是正无穷)。否则的话,说
    明在 i 的基础上加上 j 的平方符合条件,所需的完全平方数的个数就是 i 需要的个数加上一。

    import java.util.Arrays;
    
    class Solution {
    
        public int numSquares(int n) {
            int[] dp = new int[n + 1];
            Arrays.fill(dp, Integer.MAX_VALUE);
            dp[0] = 0;
            for (int i = 0; i <= n; i++) {
                for (int j = 1; i + j * j <= n; j++) {
                    dp[i + j * j] = Math.min(dp[i + j * j], dp[i] + 1);
                }
            }
            return dp[n];
        }
    
        public static void main(String[] args) {
            Solution s = new Solution();
            int n = s.numSquares(8);
            System.out.println(n);
        }
    };
  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode
    位运算实现加法运算
    反转字符串
    数组中的逆序对
    矩阵中的路径
    机器人的运动范围
    滑动窗口的最大值
    HTML5全屏浏览器兼容方案
  • 原文地址:https://www.cnblogs.com/googlemeoften/p/5849224.html
Copyright © 2020-2023  润新知