https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/
我的解,暴力枚举
class Solution {public:vector<vector<int>> findContinuousSequence(int target) {vector<vector<int>> result;vector<int> vec;int start = 1;for (int i = 1; i <= (target/2)+1;++i) {int sum = 0;for (int j = i; j <= (target/2)+1; ++j) {sum += j;if (sum == target) {vec.push_back(j);result.push_back(vec);vec.clear();break;}else if (sum < target) {if (sum+i > target) {vec.clear();break;}else {vec.push_back(j);}}else {vec.clear();break;}}}return result;}};
官方双指针解
sum 值通过求和公式得
如果 sum 等于目标值则情况临时数组并将区间 [l,r] 内所有值写入其中,然后结果数组push这个临时数组,左指针++
- 如果 sum 大于目标,则左指针右移
- sum 小于目标,右指针右移
class Solution { public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>>vec; vector<int> res; for (int l = 1, r = 2; l < r;){ int sum = (l + r) * (r - l + 1) / 2; if (sum == target) { res.clear(); for (int i = l; i <= r; ++i) { res.emplace_back(i); } vec.emplace_back(res); l++; } else if (sum < target) { r++; } else { l++; } } return vec; } };
