Skip to content

Commit 2145d9d

Browse files
committed
Runtime: 20 ms (Top 91.34%) | Memory: 42.30 MB (Top 82.04%)
1 parent d374f6a commit 2145d9d

File tree

1 file changed

+11
-40
lines changed

1 file changed

+11
-40
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,18 @@
1-
2-
3-
1+
// Runtime: 20 ms (Top 91.34%) | Memory: 42.30 MB (Top 82.04%)
42

53
class Solution {
64
public int numSquares(int n) {
5+
int dp[]=new int [n+1];
6+
dp[0]=0;
7+
dp[1]=1;
78

8-
ArrayList<Integer> perfect_squares = new ArrayList<>();
9-
int i=1;
10-
while(i*i <= n){
11-
perfect_squares.add(i*i);
12-
i++;
9+
for(int i=2;i<dp.length;i++){
10+
int min=Integer.MAX_VALUE;
11+
for(int j=1;j*j<=i;j++){
12+
min=Math.min(min,dp[i-j*j]);
13+
}
14+
dp[i]=min+1;
1315
}
14-
Integer[][] dp = new Integer[n+1][perfect_squares.size()+1];
15-
int answer = helper(n , perfect_squares , perfect_squares.size()-1,dp);
16-
return answer;
16+
return dp[n];
1717
}
18-
19-
public int helper(int n , ArrayList<Integer> coins ,int i,Integer[][] dp){
20-
21-
if(n == 0){
22-
return 0;
23-
}
24-
if(i<0){
25-
return 999999; // I'm not taking INT_MAX here, since int variables will overflow with (1 + INT_MAX)
26-
// just take any number greater than constraint ( 10^4)
27-
}
28-
if(dp[n][i] != null){
29-
return dp[n][i];
30-
}
31-
int nottake = 0 + helper(n , coins, i-1,dp);
32-
int take = 9999999;
33-
if(coins.get(i) <= n){
34-
take = 1 + helper(n-coins.get(i),coins,i,dp );
35-
}
36-
dp[n][i] = Math.min(nottake,take);
37-
return dp[n][i];
38-
39-
40-
41-
}
42-
43-
4418
}
45-
46-
47-

0 commit comments

Comments
 (0)