1.解析
题目大意,利用复制和粘贴,求解最少经过几步可以完成N个'A'
2.分析
我刚开始理解错题意啦,我以为只要是不少于n个'A'字符就可以。例如n= 7,如果不要求个数的话,经过6步就可以,第1步复制,第2步粘贴,第3步粘贴,此时为AAA,第4步复制,第5步粘贴,第6步粘贴,此时为AAAAAAAAA。原来只需要复制n个A,参考@Grandyang博主的思路,我还是习惯用DP,因为这道题涉及了最值。先看一下几个简单的实例:
n = 1,经过0步
n = 2,第1次复制,第2次粘贴,经过2步
n = 3,第1次复制,第2次粘贴,第3次粘贴,经过3步
n = 4,第1次复制,第2次粘贴,第3次复制,第4次粘贴,经过4步
n = 5,第1次复制,第2次粘贴,第3次粘贴,第4次粘贴,第5次粘贴,经过5步
n = 6,第1次复制,第2次粘贴,第3次复制,第4次粘贴,第5次粘贴,经过5步
用dp[i] 表示n = i时经过的最少步数,那么其中, j 是 i 的因子。试想一下,如果j 不是i 的因子,那么肯定不能完成n个A的复制。
class Solution {
public:
int minSteps(int n){
vector<int> dp(n+1, 0);
int res = INT_MAX;
for (int i = 2; i <= n; ++i){
dp[i] = i;
for (int j = i - 1; j > 1; --j){
if (i % j == 0) //只有当前j是i的因子
dp[i] = min(dp[i], dp[j] + i / j);
}
}
return dp[n];
}
};