1class Solution {2public:3int numSquares(int n) {4vector<int> perfectSq;56for (int i = 1; i * i <= n; ++i) {7perfectSq.push_back(i * i);8}910int m = perfectSq.size();11vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));1213dp[0][0] = 0;14for (int i = 1; i <= n; ++i) dp[0][i] = INT_MAX;1516for (int i = 1; i <= m; ++i) {17for (int j = 1; j <= n; ++j) {18if (j < perfectSq[i - 1]) {19dp[i][j] = dp[i - 1][j];20} else {21dp[i][j] = min(dp[i - 1][j], dp[i][j - perfectSq[i - 1]] + 1);22}23}24}2526return dp[m][n];27}28};