【题目:】 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
【示例1:】
输入:target = 9
输出:[[2,3,4],[4,5]]
【示例2:】
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
【解题思路:】 暴力法
- 从题目我们可以看到,需要二维数组来存储结果,所以我们先定义一个二维数组。每次把满足条件的结果放入一维数组中,再放入二维数组中。
- 两层循环,从i=1,i<=(target+1)/2开始,j=i,j<=(target+1)/2进行累加计算,把数据放入一维数组中,如果大于则跳出,清空一维数组,如果等于则压入二维数组中。
- 返回二维数组。
图解说明:
根据上述思想,我们写出代码:
代码:
vector<vector<int>> findContinuousSequence(int target)
{
vector<vector<int>> result;
vector<int> temp;
for(int i=1;i<=((target+1)/2);i++)
{
int sum=0;
for(int j=i;j<=(target+1)/2;j++)
{
sum+=j;
temp.push_back(j);//压入数组
if(sum>target)
{
temp.clear();
break;
}
else if(sum==target)
{
result.push_back(temp);//一维数组压入二维数组中
break;
}
}
}
return result;
}
暴力法比较无脑一点,加油!💪。