题目描述

牛客网

题目描述

输出所有和为 S 的连续正数序列。例如和为 100 的连续序列有:

  1. [9, 10, 11, 12, 13, 14, 15, 16]
  2. [18, 19, 20, 21, 22]。

解题思路

  1. public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
  2. ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
  3. int start = 1, end = 2;
  4. int curSum = 3;
  5. while (end < sum) {
  6. if (curSum > sum) {
  7. curSum -= start;
  8. start++;
  9. } else if (curSum < sum) {
  10. end++;
  11. curSum += end;
  12. } else {
  13. ArrayList<Integer> list = new ArrayList<>();
  14. for (int i = start; i <= end; i++)
  15. list.add(i);
  16. ret.add(list);
  17. curSum -= start;
  18. start++;
  19. end++;
  20. curSum += end;
  21. }
  22. }
  23. return ret;
  24. }