思路:贪心
具体思路:最后一次粘贴的是n的最大因子i,然后n更新为i,往前一直递推,直到遇到一个质数,该质数只能由一个一个粘贴得到。
下面是代码上的优化:
class Solution {
public:
int minSteps(int n) {
int ans = 0;
if (n == 1) return 0;
int flag = true; //
while (flag) {
int i = n - 1;
for (; i > 1; --i) {
if (n % i == 0) {
ans += n / i; //
n = i;
break;
}
}
if (i == 1) flag = false;
}
return ans + n;
}
};
优化一:ans直接 + n/i 。把复制和粘贴看成一块,就不用专门定义一个变量记录复制了几次。
优化二:因为是直到遇到一个质数结束循环,可以定义一个flag的bool变量来记录状态,如果在while循环内i–到了1说明n是质数了,直接退出;就不用在while的循环体内专门写一个判断是质数的函数了。