vector<vector<int> > FindContinuousSequence(int sum) {
int mmax = (int)sqrt(2 * sum); // 求出可能的数列中个数做多(mmax)的情况,即:1+2+...+m = sum 的情况,此时有 m=mmax
vector<int> one;
vector< vector<int>> rt;
for (int k = mmax; k >= 2; k--) { // k:数量,保证数量 m 越多的,保存在 rt 的最前面
if ((2 * sum - k * k + k) % (2 * k) == 0) {
int n = (2 * sum - k * k + k) / (2 * k); // n: 等差数列的下限坐标
for (int l = n; l <= n + k - 1; l++) { // n + k -1: 等差数列的上限坐标
one.push_back(l);
}
rt.push_back(one);
one = {}; // 每次使用one 保存一种情况后,便清除其中的数据
}
}
return rt;
}