1. class Solution {
    2. public:
    3. int numSquares(int n) {
    4. vector<int> dp(n+1, 100);
    5. if(n<4){
    6. return n;
    7. }
    8. dp[0] = 0;
    9. dp[1] = 1;
    10. dp[2] = 2;
    11. dp[3] = 3;
    12. dp[4] = 1;
    13. if(n == 4){
    14. return 1;
    15. }
    16. for(int i = 5; i<=n;i++){
    17. int temp = sqrt(i);
    18. // cout<<temp<<endl;
    19. for(int j = sqrt(i); j >0;j--){
    20. dp[i] = min(dp[i], dp[i - j * j] + 1);
    21. }
    22. // cout<<i<<": "<<dp[i]<<endl;
    23. }
    24. return dp[n];
    25. }
    26. };