感想
有一说一,刚打开LeetCode没看懂怎么写代码提交,题解也没看到输入数据,后面细品一波,是这个数据写好了,可以当做一个函数来看,在函数中写代码就行了
做了两道题试水
第一题:组合(使用简单回溯)
class Solution {
private:
vector<vector<int>> result;//保存所有组合方式
vector<int> path;//只保存一种组合方式
void bfs(int n,int k,int startIndex){
//回溯
if(path.size()==k){
//终止条件:当path保存的数据满足题目所描述的k个数据一个组合
result.push_back(path);//就将path保存到result中
return ;
}
for(int i=startIndex; i<=n; i++){
path.push_back(i);//处理节点
bfs(n,k,i+1);
path.pop_back();//回溯,撤销回溯的节点
}
}
public:
//这个是系统提供的方法,在这里调用就行
vector<vector<int>> combine(int n, int k) {
//这个n,k就是题目描述的要输入的数据,已经预置好了
bfs(n,k,1);//调用上面的方法
return result;//返回一个vector
}
};
题目二:找重复数据
这个数据不大,用暴力就能过,也可以利用set的数据不重复属性来做也可以用二分法处理
class Solution {
public:
//系统提供的一个int类型的函数
int findRepeatNumber(vector<int>& nums) {
int n = nums.size();
sort(nums.begin(),nums.end());//排序
for(int i=1;i<n;i++)
{
if(nums[i]==nums[i-1])
return nums[i]; //重复就返回这个数据
}
return -1;
}
};