<剑指Offer>面试题57(2): 和为 s 的连续正数序列

题目描述

  • 输入一个正数 s,打印出所有和为 s 的 连续正数序列(至少含有两个数)
  • 例如,输入 15,由于 1+2+3+4+5 = 4+5+6 = 7+8 = 15,所以打印出 3 个连续序列 1 ~ 5,4 ~ 6,7 ~ 8

题目解读

  • 剑指Offer 282

代码

#include
#include
using namespace std;

class Solution {
public:
    vector > FindContinuousSequence(int sum) {
        int left = 1;
        int right = 2;
        int middle = (1 + sum) / 2;
        int toSum = left + right;
        vector > data;

        while(left < middle){
            if(toSum == sum){
                data.push_back(core(left, right));
            }

            while(toSum > sum && left < middle){
                toSum = toSum - left;
                left ++;
                if(toSum == sum){
                    data.push_back(core(left, right));
                }
            }
            right ++;
            toSum = toSum + right;
        }
        return data;
    }

    vector core(int left, int right){
        vector data;
        for(int i= left; i <= right; i++){
            data.push_back(i);
        }
        return data;
    }
};


int main(){
    Solution ss;
    vector > data = ss.FindContinuousSequence(15);
    for(int i=0; i < data.size(); i++){
        for(int j=0; j < data[i].size(); j++){
            cout<
<剑指Offer>面试题57(2): 和为 s 的连续正数序列_第1张图片

总结展望

  • 优秀的思路,比普通方法强大!

你可能感兴趣的:(<剑指Offer>面试题57(2): 和为 s 的连续正数序列)