Problem
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
限制:1 <= target <= 10^5
Example1
输入:target = 9
输出:[[2,3,4],[4,5]]
Example2
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
Solution
2020-3-6 暴力回溯,此题应该还有更好的解法
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
vector<int> tmp;
vector<vector<int>> ret;
int curSum = 0;
for(int i = 1;i <= target / 2;++i)
{
backtrack(i,target,curSum,tmp,ret);
}
return ret;
}
void backtrack(int curNum,int target,int &curSum,vector<int> &tmp,vector<vector<int>> &ret)
{
curSum += curNum;
tmp.push_back(curNum);
if(curSum >= target)
{
if(curSum == target)
ret.push_back(tmp);
tmp.pop_back();
curSum -= curNum;
return;
}
backtrack(curNum+1,target,curSum,tmp,ret);
tmp.pop_back();
curSum -= curNum;
}
};