1. 程式人生 > >Leetcode:279. 完全平方數

Leetcode:279. 完全平方數

class Solution {
public:
    int numSquares(int n) {
        return BFS(n);
    }
    int BFS(int n) {
        if (mp[n] > 0) { return mp[n]; }
        if (isSquare(n)) {
            mp[n] = 1;
            return 1;
        }
        int sq = sqrt(n);
        int i;
        for (i = 1; i <= sq; i++) {
            int n1 = i*i, n2 = n - n1;
            if (isSquare(n2)) { 
                mp[n] = 2;
                return 2; 
            }
        }
        int min = INT_MAX;
        for (i = 1; i <= sq; i++) {//當前選擇i*i
            int temp = BFS(n - i*i) + 1;
            min = (temp < min ? temp : min);
        }
        mp[n] = min;
        return min;
     }
    bool isSquare(int n) {
        int sq = sqrt(n);
        return (n - sq*sq)==0;
    }
private:
    unordered_map<int, int>mp;
};