剑指offer习题41-50

41:

# -*- coding:utf-8 -*-
class Solution:
    def FindContinuousSequence(self, tsum):
        # write code here
        result = []
        count = 0
        for i in range(1,tsum//2+1):
            count = i 
            for j in range(i+1,tsum//2+2):
                count += j
                if count == tsum:
                    result.append(list(range(i,j+1)))
        return result

42:

# -*- coding:utf-8 -*-
class Solution:
    def FindNumbersWithSum(self, array, tsum):
        # write code here
        result = 0
        flag = 0
        mul = -1
        for i in array:
            j = tsum - i
            if j in array and j != i:
                if not flag:
                    mul = j * i
                    result = i
                    flag = 1
                elif i * j < mul:
                    mul = i * j
                    result = i
        a = []
        if not flag:
            return a
        else:
            a.append(result)
            a.append(mul / result)
            return a

43:

# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        behand = s[n:]
        head = s[:n]
        return behand+head

44:

# -*- coding:utf-8 -*-
class Solution:
    def IsContinuous(self, numbers):
        # write code here
        if len(numbers) == 0:
            return False
        kcount = numbers.count(0)
        numbers.sort()
        for i,v in enumerate(numbers[:-1]):
            if v != 0:
                if numbers[i+1] == v:
                    return False
                kcount = kcount - (numbers[i+1] - v) + 1
        if kcount < 0:
            return False
        return True


sol = Solution()

print(sol.IsContinuous([1,3,2,6,4]))

45:

# -*- coding:utf-8 -*-
class Solution:
    def LastRemaining_Solution(self, n, m):
        # write code here
        if n < 1:
            return -1
        lis = list(range(n))
        final = -1
        start = 0
        while lis:
            k = (start + m - 1) % n
            final = lis.pop(k)
            n -= 1
            start = k
        return final
/**
约瑟夫问题
递推公式
让f[i]为i个人玩游戏报m退出最后的胜利者的编号,最后的结果自然是f[n]
服了
f[1] = 0;
f[i] = (f[i - 1] + m) mod i;

46:

# -*- coding:utf-8 -*-
class Solution:
    def Sum_Solution(self, n):
        # write code here
        if n == 1:
            return 1
        return self.Sum_Solution(n-1) + n

47:




猜你喜欢

转载自blog.csdn.net/u012693077/article/details/80900918