[Leetcode] #279 Perfect Squares (BFS, DP)

来源:互联网 发布:西门子plc数据用于联网 编辑:程序博客网 时间:2024/06/08 20:20

Discription:

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.

Solution:

int numSquares(int n) {  //BFSint sn = sqrt(n);if (sn*sn == n)return 1;vector<int> square, state(n + 1, 0);queue<int> que;for (int i = 1; i <= sn; i++){square.push_back(i*i);que.push(i*i);state[i*i] = 1;}while (!que.empty()){int x = que.front();que.pop();for (int i : square){if (x + i <= n && state[x + i] == 0){state[x + i] = state[x] + 1;que.push(x + i);}}}return state[n];}
int numSquares(int n) { //DPvector<int> dp(n+1,0);for (int i = 1; i <= n; i++){int square = INT_MAX;for (int j = 1; j*j <= i; j++)square = min(square, dp[i - j*j] + 1);dp[i] = square;}return dp[n];}

0 0
原创粉丝点击