题目:屏幕上初始只有一个‘A‘字符,每一步操作可以:1.复制全屏字符串。2.粘贴。求得到N个‘A’的最小操作次数。
思路:很自然地想到应该要得到N的因子,因为到N个A必须要先得到N的某个约数个'A',然后再复制粘贴。
先找到N的全部因子存在factors里,然后发现,不管从哪个因子开始,其操作次数都是该因子。
比如,10有2个因子——2和5。从1到2要2次,从2到10要5次;从1到5要5次,从5到10要2次。所以不管就哪个因子开始,其总操作数都是不变的。
所以直接把它们加起来就行了。
如果N=1直接返回0。
这题tag是动归,但是我的思路和动归一点关系也没有
class Solution {
public:
int minSteps(int m) {
int n = m;
if (n == 1) return 0;
vector<int> factors;
while (n > 1) {
for (int i = 2; i <= n; ++i)
if (n % i == 0) {
factors.push_back(i);
n /= i;
break;
}
}
int sum = 0;
for (int i = 0; i < factors.size(); ++i) {
cout << factors[i] << endl;
sum += factors[i];
}
cout << sum << endl;
return sum;
}
};