Leetcode279-Perfect Squares

题目描述

给定一个正整数 n ,找到最少数量的平方数(例如1, 4, 9, 16)使这些平方数的和等于 n 。返回最少的数量。

示例

Input: n = 12
Output: 3
解释: 12 = 4 + 4 + 4.
Input: n = 13
Output: 2
解释: 13 = 4 + 9.

思路

将整个过程看做一张图,每个数字都是一个点,两个数字之间差距为平方数时有一条单向边。使用 BFS 来求从 0 到 n 的最短路。

代码

class Solution {
public:
    int numSquares(int n) {
    vector<int>dis(n+1,INT_MAX);//将数组初始化无穷大
    dis[0]=0;
        queue<int>q;
        q.push(0);
        while(!q.empty())
        {
            int s=q.front();
            if(s==n)
                break;
            for(int i=1;s+i*i<=n;i++)
            {
                if(dis[s+i*i]>dis[s])
                {
                    dis[s+i*i]=dis[s]+1;
                    q.push(s+i*i);
                }
            }
            q.pop();
        }
        return dis[n];
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_44010678/article/details/88237569