方法一:
参考:https://leetcode-cn.com/problems/2-keys-keyboard/solution/zhi-you-liang-ge-jian-de-jian-pan-by-leetcode/
理解为分解素数
class Solution {
public int minSteps(int n) {
int ans = 0, d = 2;
while (n > 1) {
while (n % d == 0) {
ans += d;
n /= d;
}
d++;
}
return ans;
}
}
方法二:
递归
class Solution {
public int minSteps(int n) {
if (n == 1) {
return 0;
}
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return i + minSteps(n / i);
}
}
return n;
}
}
转化为动态规划
class Solution {
public int minSteps(int n) {
int[] dp = new int[n + 1];
dp[1] = 0;
int h = (int)Math.sqrt(n);
for (int i = 2; i <= n; i++) {
dp[i] = i;
for(int j = 2; j <= h; j++) {
if(i % j == 0) {
dp[i] = dp[j] + dp[i / j];
break;
}
}
}
return dp[n];
}
}
这题不明白!!!