- 结果
- 思路
思路比较简单,但是自己写的代码没有充分利用数学中的规律,后面自己还排序了,导致耗时比较久。第二份代码是LeetCode给出的答案,第一份代码是自己写的,第一次使用assign(迭代器first, 迭代器end)(注意这里不一定是vector的迭代器,其他结构的迭代器也是可以的),这个函数的作用是将[first, end]的内容复制到vector中。
- 代码
class Solution {
public:
vector<int> divingBoard(int shorter, int longer, int k) {
vector<int> ans;
set<int> myset;
if(k == 0) return ans;
for(int i = 0; i <= k;i++){
int temp = shorter * i + (k -i) * longer;
myset.insert(temp);
}
ans.assign(myset.begin(), myset.end());
// sort(ans.begin(), ans.end());
return ans;
}
};
下面这份代码充分利用了数学知识,哎,自己太笨,想不到。
class Solution {
public:
vector<int> divingBoard(int shorter, int longer, int k) {
vector<int> ans;
if(k == 0) return ans;
if(shorter == longer){
ans.push_back(shorter * k);
return ans;
}
for(int i = 0; i <= k;i++){
ans.push_back(shorter *(k - i) + i * longer);
}
return ans;
}
};