LeetCode 279. Perfect Squares

Question:

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.

Code:

public class Solution {
    public int numSquares(int n) {
        Queue<Map.Entry<Integer, Integer>> queue = new LinkedList<>();
        queue.add(new java.util.AbstractMap.SimpleEntry<Integer, Integer>(n, 0));

        boolean[] visited = new boolean[n+1];
        visited[n] = true;
        while (!queue.isEmpty()){
            Map.Entry<Integer, Integer> entry = queue.poll();
            int num = entry.getKey();
            int step = entry.getValue();

            for (int i = 1; ; i++) {
                int a = num - i*i;
                if(a < 0){
                    break;
                }
                if(a == 0){
                    return step + 1;
                }
                if (!visited[a]){
                    queue.add(new java.util.AbstractMap.SimpleEntry<Integer, Integer>(a, step + 1));
                    visited[a] = true;
                }
            }

        }
        return 0;
    }
}

看到其他网友提交的代码,有用动态规划的,感觉比自己写的思路简单的多,也贴出来学习

public class Solution {

    public int numSquares(int n) {
        if (n < 2) return 1;

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

        return dp[n];
    }
}
时间: 2024-08-06 00:01:50

LeetCode 279. Perfect Squares的相关文章

【leetcode】Perfect Squares (#279)

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. 解析: 利用动态规划解决此问题:对于要求的当前节

[email&#160;protected] [279]Perfect Squares

https://leetcode.com/problems/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, retur

【Leetcode】Perfect Squares

题目链接:https://leetcode.com/problems/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 = 

279. Perfect Squares

Total Accepted: 48616 Total Submissions: 142008 Difficulty: Medium 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;

Leetcode: Valid Perfect Squares

Given a positive integer num, write a function which returns True if num is a perfect square else False. Note: Do not use any built-in library function such as sqrt. Example 1: Input: 16 Returns: True Example 2: Input: 14 Returns: False 我的binary Sear

hdu 3524 Perfect Squares 推公式求逆元

Perfect Squares Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 501    Accepted Submission(s): 272 Problem Description A number x is called a perfect square if there exists an integer b satisfy

Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩

题目来源:Light OJ 1288 Subsets Forming Perfect Squares 题意:给你n个数 选出一些数 他们的乘积是完全平方数 求有多少种方案 思路:每个数分解因子 每隔数可以选也可以不选 0 1表示 然后设有m种素数因子 选出的数组成的各个因子的数量必须是偶数 组成一个m行和n列的矩阵 每一行代表每一种因子的系数 解出自由元的数量 #include <cstdio> #include <cstring> #include <algorithm&g

CF914A Perfect Squares

CF914A Perfect Squares 题意翻译 给定一组有n个整数的数组a1,a2,…,an.找出这组数中的最大非完全平方数. 完全平方数是指有这样的一个数x,存在整数y,使得x=y^2y2 . 输入格式 第一行输入一个单独的整数n(1<=n<=1000 ),n为该组数的数量. 接下来有n个整数,a1,a2,an(-10^6<=a<=10^6) 数据保证至少存在一个整数是非完全平方数. 题目描述 Given an array a_{1},a_{2},...,a_{n}a1?

[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. Credits:Special thanks