LeetCode 279 – 完全平方数

题目描述

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。

示例:
输入:n = 12
输出:3
解释:12 = 4 + 4 + 4

题目分析

动态规划,ans[n] = ans[n – 完全平方数] + 1
递推的同时,枚举完全平方数即可。

时间复杂度 O(n * sqrt(n))

Java

public int numSquares(int n) {
    int[] ans = new int[n + 1];
    for (int i = 1; i <= n; i++) {
        ans[i] = Integer.MAX_VALUE;
        for (int j = 1; j * j <= i; j++) {
            ans[i] = Math.min(ans[i], ans[i - j * j] + 1);
        }
    }
    return ans[n];
}

Kotlin

fun numSquares(n: Int): Int {
    val ans = IntArray(n + 1) { Int.MAX_VALUE }
    ans[0] = 0
    for (i in 1..n) {
        for (j in 1..i) {
            val square = j * j
            if (square <= i) {
                ans[i] = min(ans[i], ans[i - square] + 1)
            } else {
                break
            }
        }
    }
    return ans[n]
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部