LeetCode--数学方法

题目一:完全平方数

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

示例 1:

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

输入: n = 13
输出: 2
解释: 13 = 4 + 9.

自己没有较好的思路,只知道要使用动态规划来解决,但是自己没有解决,参考了官方解答

即:n要是符合4^k(8m+7)的形式,则一定要分解为4个数的平方和

Java代码解决:(提交版)

class Solution {
    public int numSquares(int n) {
        Solution example1 = new Solution();
        while(n % 4 == 0){
            n = n/4;
        }
        if(n%8 == 7){
            return 4;
        }
        if(example1.issquare(n)){
            return 1;
        }
        for (int i = 1; i*i <=n ; ++i) {
            if(example1.issquare(n - i*i)){
                return 2;
            }
        }
        return 3;
    }
    public boolean issquare(int n){
        int k = (int) Math.sqrt(n);
        return n == k*k;
    }
}

Java代码解决(输出版),第一个输出的数字

public class temp01 {
    public static void main(String[] args) {
        temp01 example1 = new temp01();
        int n = 13;
        while(n % 4 == 0){
            n = n/4;
        }
        if(n%8 == 7){
            System.out.println(4);;
        }
        if(example1.issquare(n)){
            System.out.println(1);
        }
        for (int i = 1; i*i <=n ; ++i) {
            if(example1.issquare(n - i*i)){
                System.out.println(2);
                break;
            }
        }
        System.out.println(3);
    }
    public boolean issquare(int n){
        int k = (int) Math.sqrt(n);
        return n == k*k;
    }
}

未完待续:后续使用动态规划的思维进行处理

 

猜你喜欢

转载自blog.csdn.net/yezonghui/article/details/112055549
今日推荐