概述
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
自己用的是二分法
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
max_num = (target+1)//2
res = []
length = max_num-1
for a in range(1,max_num):
l = a+1
r = a+length
middle = (l+r)//2
while(l < r):
total = ((a+middle)*(middle-a+1))//2
if total < target:
l = middle + 1
middle = (l+r)//2
elif total > target:
r = middle - 1
middle = (l+r)//2
else:
break
if target == ((a+middle)*(middle-a+1))//2:
length = middle-a+1
res.append(list(range(a,middle+1)))
return res
B站学习的更为简单的方法
class Solution:
def findContinuousSequence(self, target: int) -> List[List[int]]:
max_num = (target+1)//2
l,r,total = 1,2,3
res = []
while(r <= max_num):
if total > target:
total -= l
l += 1
elif total < target:
r += 1
total += r
else:
res.append(list(range(l,r+1)))
r += 1
total += r
return res
最后
以上就是成就大雁为你收集整理的剑指 Offer 57 - II 和为s的连续正数序列(python)的全部内容,希望文章能够帮你解决剑指 Offer 57 - II 和为s的连续正数序列(python)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复