当前位置: 代码迷 >> 综合 >> 力扣OJ 剑指 Offer 57 - II. 和为s的连续正数序列
  详细解决方案

力扣OJ 剑指 Offer 57 - II. 和为s的连续正数序列

热度:21   发布时间:2024-02-19 09:32:06.0

输入一个正整数 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;}
};

 

  相关解决方案