검 지 offer - python 57 과 S 의 연속 정수 서열

제목 설명
문제: 샤 오 밍 은 수학 을 매우 좋아 하 는데 어느 날 수학 숙제 를 할 때 9 ~ 16 의 합 을 계산 해 달라 고 요구 하 자 바로 정 답 을 100 이 라 고 썼 다.그러나 그 는 이것 에 만족 하지 않 았 다. 그 는 도대체 몇 가지 연속 적 인 정수 서열 의 합 이 100 (적어도 두 개의 수 를 포함) 인지 생각 하고 있 었 다.얼마 지나 지 않 아 그 는 다른 그룹의 연속 정수 와 100 의 서열 을 얻 었 다. 18, 19, 20, 21, 22.지금 당신 에 게 문 제 를 맡 기 겠 습 니 다. 당신 도 곧 모든 것 과 S 를 위 한 연속 정수 서열 을 찾 을 수 있 습 니까?Good Luck!
사고: 두 개의 지침 을 설정 하고 먼저 숫자 1 과 숫자 2 를 가리 키 며 이 두 개의 지침 을 small 과 big 로 설정 합 니 다. small 과 big 에 대해 합 을 구하 고 목표 치 보다 크 면 현재 와 그 중에서 small 값 을 삭제 하고 small 값 을 하나 더 합 니 다. 만약 에 목표 치 보다 작 으 면 big 값 을 하나 더 한 다음 에 새로운 big 값 을 추가 합 니 다.목표 값 과 같 으 면 small 을 big 로 출력 하 는 동시에 big 를 합 쳐 이전 작업 을 계속 합 니 다.
문제 풀이 의 사고 방향.

# -*- coding:utf-8 -*-
class Solution:
    def FindContinuousSequence(self, tsum):
        # write code here
        if tsum < 3:
            return []
        small = 1
        big = 2
        middle = (tsum + 1) // 2
        #     ,        tsum
        cursum = big + small
        output = []
		# cursum     [small,big]      
        while small < middle:
            if cursum == tsum:
                output.append(list(range(small, big + 1)))
            while cursum > tsum and small < middle:
                cursum -= small
                small += 1
                if cursum == tsum:
                    output.append(list(range(small, big + 1)))
            big += 1
            cursum += big
        return output
class Solution:
    def FindContinuousSequence(self, tsum):
        # write code here
        res = []
        #  [i,...,j]  
        for i in range(1, tsum // 2 + 1):
            for j in range(i+1, tsum // 2 + 2):
                #          
                if (j - i + 1) * (i + j) // 2 == tsum:
                    res.append(list(range(i, j + 1)))
                    break
                elif (j - i + 1) * (i + j) // 2 > tsum:
                    break
        return res

좋은 웹페이지 즐겨찾기