输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
限制:
1 <= target <= 10^5
思路:
等差数列求和公式,因式分解
class Solution {
public:vector<vector<int>> findContinuousSequence(int target) {target*=2;vector<vector<int>>ans;for(int i=2;i*i<target;i++){if(target%i)continue;int j=target/i;if((i+j)%2==0)continue;vector<int>tmp(i);for(int k=0;k<i;k++)tmp[k]=k+(j+1-i)/2;ans.insert(ans.begin(),tmp);}return ans;}
};