1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public: int numSquares(int n) { int f[105][10005]; memset(f, 0x3f, sizeof(f)); f[0][0] = 0; for (int i = 1; i * i <= n; ++i) { int x = i * i; for (int j = 0; j <= n; ++j) { f[i][j] = min(f[i][j], f[i - 1][j]); if (j >= x) f[i][j] = min(f[i][j], f[i][j - x] + 1); } } return f[(int)sqrt(n)][n]; } };
|