輸入一個正整數 target ,輸出所有和爲 target 的連續正整數序列(至少含有兩個數)。
序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。
示例 1:
輸入:target = 9
輸出:[[2,3,4],[4,5]]
示例 2:
輸入:target = 15
輸出:[[1,2,3,4,5],[4,5,6],[7,8]]
限制:
1 <= target <= 10^5
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
思路1:雙指針
直接用雙指針來控制連續序列的頭部和尾部,一前一後,向前挪動,保證和爲目標值,如果和小了,則將前指針前移,如果大了,將後指針前移。
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
i = 1
j = 2
sum = i + j
ans = []
while i < j:
if sum == target:
ans.append([_ for _ in range(i, j + 1)])
j += 1
sum += j
elif sum < target:
j += 1
sum += j
else:
sum -= i
i += 1
return ans