Skip to content

Instantly share code, notes, and snippets.

@cc2011
Created September 5, 2017 06:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cc2011/b23bd56cb7c68cc88cfd972f5ea7ea2c to your computer and use it in GitHub Desktop.
Save cc2011/b23bd56cb7c68cc88cfd972f5ea7ea2c to your computer and use it in GitHub Desktop.
2-keys-keyboard
class Solution {
/*
public int minSteps(int n) {
int[] dp = new int[n+1];
for(int i=0; i <= n; i++) {
dp[i] = -1;
}
return recurse(dp, n);
}
public int recurse(int[] dp, int currNum) {
if(currNum == 1) {
return 0;
}
if (dp[currNum] != -1) {
return dp[currNum];
}
for(int i = currNum/2; i >1; i--) {
if( currNum % i == 0) {
dp[currNum] = recurse(dp, i) + currNum/i; // dp[3] + 3->9 = dp[3] + 9/3(including copy)
return dp[currNum];
}
}
dp[currNum] = currNum;
return currNum;
}
*/
//pure recursive
/*
public int minSteps(int n) {
if (n == 1) return 0;
for (int i = n / 2; i > 1; i--) {
if (n % i == 0) {
return minSteps(i) + n / i;//
}
}
return n;
}
*/
//pure iterative
public int minSteps(int n) {
int[] dp = new int[n+1];
for(int i=2; i <= n; i++) {
dp[i] = i;
for(int j = i/2; j > 1 ; j--) {
if (i % j == 0) {
dp[i] = dp[j] + i/j;
break;
}
}
}
return dp[n];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment