本文主要是介绍[剑指offer] 和为S的连续正数序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目内容
https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe?tpId=13&tqId=11194&tPage=3&rp=2&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
题目思路
在这里我们假定连续的整数序列长度至少为2。对于tsum,我们首先设定一个最大可能,也就是中值。因为中值和大于中值的两个数就可以等于或者大于tsum。我们设定left,right两个指针用来界定序列的左右侧边界。
程序代码
# -*- coding:utf-8 -*-
class Solution:def FindContinuousSequence(self, tsum):# write code hereif tsum<3:return []else:mid=tsum//2+1left,right=1,2res=[]while right<=mid:tmp=sum(range(left,right+1))if tmp==tsum:res.append([i for i in range(left,right+1)])right+=1elif tmp<tsum:right+=1else:left+=1return res
这篇关于[剑指offer] 和为S的连续正数序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!