class Solution {
public int minSteps(int n) {
if (n == 1) return 0;
int[] dp = new int[n + 1];
for (int i = 2; i <= n; i++) {
dp[i] = i;
int sqrt = (int) Math.sqrt(i);// 平方根向下取整 找到最小质数
for (int j = 2; j <= sqrt; j++) {
if (i % j == 0) {
dp[i] = dp[j] + dp[i / j];
break;
}
}
}
return dp[n];
}
}
感觉看的还是有点晕
官方直接是数学做法,好理解一点,而且效率更高
//质数之和
//假如是10个A 他的可能性就是 以下两种情况
//AAAAA AAAAA 和 AA AA AA AA AA
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;
}
}