题目描述
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
算法思想
如果有两个连续的数之和等于target,那么相差为1, (target - 1) % 2 == 0
且数组一定是从 (target - 1) / 2开始的,数组的元素就是2个;
如果是3个连续的数组,那么三个数之间相差为1、2,(target - 1 - 2) % 3 == 0
且数组一定是从 (target - 1 - 2) / 3开始的,数组元素是3个.
依次类推,但是注意target必须是大于0的数,且ret需要倒序。
代码实现
class Solution {
public:
vector<vector<int>> findContinuousSequence(int target) {
vector<vector<int>> ret;
int i = 1;
while(target > 0)
{
target -= i++;
if(target > 0 && target % i ==0)
{
vector<int> temp;
for(int j = 0; j < i; j++)
temp.push_back(target/i + j);
ret.push_back(temp);
}
}
reverse(ret.begin(),ret.end());
return ret;
}
};