1. 先求最小的前n项和,若sum值大于最小n项,存入数组,继续与n+1项和比较,直到找到可能表示sum值的最大长度len.
  2. sum值与最后一个值做差值,在将其对长度求模,若为为0,则说明该长度存在一个解
  3. 长度减一, 数组值前移一位,向前遍历,直至长度为 2
  • 举例:9
  • 9 > 1 + 2 存入数组v[0]
  • 9 > 1 + 2 + 3 存入数组v[1]
  • 9 < 1 + 2 + 3 + 4 (v.size() = 2 , len = v.size() + 1)
  • 因此 9 的最大可能长度为 3, len = 3
  • (9 - v[1]) % len(3) == 0 true,结果存入
  • (9 - v[0]) % len(2) == 0 true
  • 结束
public:
    vector<vector<int> > FindContinuousSequence(int sum) {
        if (sum <= 2)
            return {};
        //1 1,2
        //2 1,2,3
        //3 1,2,3,4
        //k 1,2,3,4,...,k+1
        //12 1,2,...,13
        vector<vector<int> > ret; 
        vector<int> v;
        v.push_back(3);
        for (int i = 3; i <= 13; ++i) {
            int tmp = v.back() + i;
            if (sum > v.back())
                v.push_back(tmp);
        }
        int len = v.size() + 1;
        for (; len >= 2; --len) {
            int tmp = sum - v.back();
            if (tmp % len == 0) {
                tmp = tmp / len;
                vector<int> cur;
                for (int j = 1; j <= len; ++j)
                    cur.push_back(j + tmp);
                ret.push_back(cur);
            }
            v.pop_back();
        }
        return ret;
    }
};