题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
1 class Solution { 2 public: 3 vector<vector<int> > FindContinuousSequence(int sum) { 4 vector<vector<int> > result; 5 if (sum <= 2) 6 return result; 7 int k = 1,my_sum = 0; 8 vector<int> vv; 9 while(my_sum <= sum) 10 { 11 my_sum += k; 12 vv.push_back(k); 13 ++k; 14 } 15 --k; 16 my_sum = my_sum - k; 17 vv.pop_back(); 18 --k; 19 while(k <= sum / 2 +1) 20 { 21 if(my_sum == sum) 22 { 23 result.push_back(vv); 24 my_sum -= vv[0]; 25 vv.erase(vv.begin()); 26 } 27 else if(my_sum < sum) 28 { 29 vv.push_back(++k); 30 my_sum += k; 31 } 32 else 33 { 34 my_sum -= vv[0]; 35 vv.erase(vv.begin()); 36 } 37 } 38 return result; 39 } 40 };