1. 程式人生 > >劍指offer——和為s的連續正整數

劍指offer——和為s的連續正整數

由於連續正整數的個數不確定,所以用兩個角標,來控制個數,最後求和。
針對數值操作:

class Solution:
	def FindContinuousSequence(self, tsum):
		l, r, sum, res = 1, 2, 3, []
        while l<r:
            if sum>tsum:
                sum -= l
                l += 1
            else:
                if sum==tsum:
                    res.append([i for i in range(l,r+1)])
                r += 1
                sum += r
        return res

針對陣列操作:

class Solution:
	def FindContinuousSequence(self,tsum):
		if tsum<3:
			return []
		res,arr=[],[1,2]
		middle=tsum//2+1
		while arr and arr[0]<middle:
			if sum(arr)<tsum:
				arr.append(arr[-1]+1)
			elif sum(arr)>tsum:
				arr.pop(0)
			else:
				res.append([i for i in arr])
            arr.append(arr[-1] + 1)
            arr.pop(0)
    	if not arr:
        	return []
   		return res