python3的各种经典案例,总共299个案例,直接可以运行(前:100个案例)

一. python3的各种经典案例,总共299个案例,直接可以运行(前:100个案例)

二. python3的各种经典案例,总共299个案例,直接可以运行(中:100个案例)

三. python3的各种经典案例,总共299个案例,直接可以运行(后:99个案例)

第一章 难度等级★

【例1】反转一个3位整数 难度等级★

3.代码实现

class Solution:
#参数number: 一个三位整数
    #返回值: 反转后的数字
    def reverseInteger(self, number):
        h = int(number/100)
        t = int(number%100/10)
        z = int(number%10)
        return (100*z+10*t+h)
#主函数
if __name__ == '__main__':
    solution = Solution()
    num = 123
    ans = solution.reverseInteger(num)
    print("输入:", num)
    print("输出:", ans)

【例2】合并排序数组 难度等级★

3.代码实现

class Solution:
    #参数A: 有序整数数组A
    #参数B: 有序整数数组B
    #返回:一个新的有序整数数组
    def mergeSortedArray(self, A, B):
        i, j = 0, 0
        C = []
        while i < len(A) and j < len(B):
            if A[i] < B[j]:
                C.append(A[i])
                i += 1
            else:
                C.append(B[j])
                j += 1
        while i < len(A):
            C.append(A[i])
            i += 1
        while j < len(B):
            C.append(B[j])
            j += 1
        return C
#主函数
#主函数
if __name__ == '__main__':
    A = [1,4]
    B = [1,2,3]
    D = [1,2,3,4]
    E = [2,4,5,6]
    solution = Solution()
    print("输入:", A, " ", B)
    print("输出:", solution.mergeSortedArray(A,B))
    print("输入:", D, " ", E)
    print("输出:", solution.mergeSortedArray(D,E))

【例3】旋转字符串 难度等级★

3.代码实现

class Solution:
    #参数s:字符列表
    #参数offset:整数
    #返回值:无
    def rotateString(self, s, offset):
        if len(s) > 0:
            offset = offset % len(s)
        temp = (s + s)[len(s) - offset : 2 * len(s) - offset]
        for i in range(len(temp)):
            s[i] = temp[i]
#主函数
if __name__ == '__main__':
    s = ["a","b","c","d","e","f","g"]
    offset = 3
    solution = Solution()
    solution.rotateString(s, offset)
    print("输入:s =", ["a","b","c","d","e","f","g"], " ", "offset =",offset)
    print("输出:s =", s)

【例4】相对排名 难度等级★

3.代码实现

class Solution:
    #参数nums为整数列表
    #返回列表
    def findRelativeRanks(self, nums):
        score = {}
        for i in range(len(nums)):
            score[nums[i]] = i
        sortedScore = sorted(nums, reverse=True)
        answer = [0] * len(nums)
        for i in range(len(sortedScore)):
            res = str(i + 1)
            if i == 0:
                res = 'Gold Medal'
            if i == 1:
                res = 'Silver Medal'
            if i == 2:
                res = 'Bronze Medal'
            answer[score[sortedScore[i]]] = res
        return answer
#主函数
if __name__ == '__main__':
    num = [5,4,3,2,1]
    s = Solution()
    print("输入为:",num)
    print("输出为:",s.findRelativeRanks(num))

【例5】二分查找 难度等级★

3.代码实现

class Solution:
    #参数nums: 整数数组
    #参数target: 要查找的目标数字
    #返回值:目标数字的第一个位置,从0开始 
	def binarySearch(self, nums, target):
		return self.search(nums, 0, len(nums) - 1, target)
	def search(self, nums, start, end, target):
		if start > end:
			return -1
		mid = (start + end)//2
		if nums[mid] > target:
			return self.search(nums, start, mid, target)
		if nums[mid] == target:
			return mid
		if nums[mid] < target:
			return self.search(nums, mid, end, target)
#主函数
if __name__ == '__main__':
my_solution = Solution()
    nums = [1,2,3,4,5,6]
    target = 3
    targetIndex = my_solution.binarySearch(nums, target)
    print("输入:nums =", nums, " ", "target =",target)
    print("输出:",targetIndex)

【例6】下一个更大的数 难度等级★

3.代码实现

class Solution:
    #参数nums1为整数数组
    #参数nums2为整数数组
    #返回整数数组
    def nextGreaterElement(self, nums1, nums2):
        answer = {}
        stack = []
        for x in nums2:
            while stack and stack[-1] < x:
                answer[stack[-1]] = x
                del stack[-1]
            stack.append(x)
        for x in stack:
            answer[x] = -1
        return [answer[x] for x in nums1]
#主函数
if __name__ == '__main__':
    s = Solution()
    nums1 = [4,1,2]
    nums2 = [1,3,4,2]
    print("输入1为:",nums1)
    print("输入2为:",nums2)
    print("输出为 :",s.nextGreaterElement(nums1,nums2))

【例7】字符串中的单词数 难度等级★

3.代码实现

class Solution:
    #参数s为字符串
    #返回整数
    def countSegments(self, s):
        res = 0
        for i in range(len(s)):
            if s[i] != ' ' and (i == 0 or s[i - 1] == ' '):
                res += 1 
        return res
#主函数
if __name__ == '__main__':
    s = Solution()
    n =  "Hello, my name is John"
    print("输入为:",n)
    print("输出为:",s.countSegments(n))

【例8】勒索信 难度等级★

3.代码实现

class Solution:
    """
    参数ransomNote为字符串
    参数magazine为字符串
    返回布尔类型
    """
    def canConstruct(self, ransomNote, magazine):
        arr = [0] * 26
        for c in magazine:
            arr[ord(c) - ord('a')] += 1 
        for c in ransomNote:
            arr[ord(c) - ord('a')] -= 1
            if arr[ord(c) - ord('a')] < 0:
                return False
        return True
#主函数
if __name__ == '__main__':
    s = Solution()
    ransomNote = "aa"
    magazine = "aab"
    print("输入勒索信为:",ransomNote)
    print("输入杂志内容:",magazine)
    print("输出为:",s.canConstruct(ransomNote,magazine))

【例9】不重复的两个数 难度等级★

3.代码实现
#参数arr是输入的待查数组
#返回值是两个值的列表,内容没有重复的

class Solution:
    def theTwoNumbers(self, a):
        ans = [0, 0]
        for i in a:
            ans[0] = ans[0] ^ i
        c = 1
        while c & ans[0] != c:
            c = c << 1
        for i in a:
            if i & c == c:
                ans[1] = ans[1] ^ i
        ans[0] = ans[0] ^ ans[1]
        return ans
if __name__ == '__main__':
    arr = [1, 2, 5, 1]
    solution = Solution()
    print(" 数组为:", arr)
    print(" 两个没有重复的数字是:", solution.theTwoNumbers(arr))

【例10】双胞胎字符串 难度等级★

3.代码实现

#参数s和t是一对字符串
#返回值是个字符串,能否根据规则转换
class Solution:
    def isTwin(self, s, t):
        if len(s) != len(t):
            return "No"
        oddS = []
        evenS = []
        oddT = []
        evenT = []
        for i in range(len(s)):
            if i & 1:
                oddS.append(s[i])
                oddT.append(t[i])
            else :
                evenS.append(s[i])
                evenT.append(t[i])
        oddS.sort()
        oddT.sort()
        evenS.sort()
        evenT.sort()
        for i in range (len(oddS)) :
            if oddS[i] != oddT[i]:
                return "No"
        for i in range (len(evenS)) :
            if evenS[i] != evenT[i]:
                return "No"
        return "Yes"
if __name__ == '__main__':
    s="abcd"
    t="cdab"
    solution = Solution()
    print(" s与t分别为:", s, t)
    print(" 是否:", solution.isTwin(s, t))

【例11】最接近target的值 难度等级★

3.代码实现

#参数array是输入列表
#参数target是目标值
#返回值是整数
class Solution:
    def closestTargetValue(self, target, array):
        n = len(array)
        if n < 2:
            return -1
        array.sort()
        diff = 0x7fffffff
        left = 0
        right = n - 1
        while left < right:
            if array[left] + array[right] > target:
                right -= 1
            else:
                diff = min(diff, target - array[left] - array[right])
                left += 1
        if diff == 0x7fffffff:
            return -1
        else:
            return target - diff
if __name__ == '__main__':
    array = [1,3,5,11,7]
    target = 15
    solution = Solution()
    print(" 输入数组为:", array,"目标值为:", target)
    print(" 最近可以得到值为:", solution.closestTargetValue(target, array))

【例12】点积 难度等级★

3.代码实现

#参数A和B是输入列表
#返回值是个整数,是点积
class Solution:
    def dotProduct(self, A, B):
        if len(A) == 0 or len(B) == 0 or len(A) != len(B):
            return -1
        ans = 0
        for i in range(len(A)):
            ans += A[i] * B[i]
        return ans
if __name__ == '__main__':
    A = [1,1,1]
    B = [2,2,2]
    solution = Solution()
    print(" A与B分别为:", A, B)
    print(" 点积为:", solution.dotProduct(A, B))

【例13】函数运行时间 难度等级★

3.代码实现

#参数s为输入原始字符串
#返回值是个字符串,意为每个名字的函数运行了多久
class Solution:
    def getRuntime(self, a):
        map={}
        for i in a:
            count = 0
            while not i[count] == ' ':
                count = count + 1
            fun = i[0 : count]
            if i[count+2] == 'n':
                count = count + 7
                v = int(i[count:len(i)])
                if fun in map.keys():
                    map[fun] = v - map[fun]
                else:
                    map[fun] = v
            else:
                count = count + 6
                v = int(i[count:len(i)])
                map[fun] = v - map[fun]
        res=[]
        for i in map:
            res.append(i)
        res.sort()
        for i in range(0,len(res)):
            res[i] = res[i] + '|' + str(map[res[i]])
        return res
if __name__ == '__main__':
    s = ["F1 Enter 10","F2 Enter 18","F2 Exit 19","F1 Exit 20"]
    solution = Solution()
    print(" 输入运行时间为:", s)
    print(" 每个输出时间为:", solution.getRuntime(s))

【例14】查询区间 难度等级★

1.问题描述
给定一个包含若干个区间的List数组,长度是1000,例如,[500,1500],[2100,3100].给定一个number,number是否在这些区间内,返回True或False。
2.问题示例
输入是 List = [[100,1100],[1000,2000],[5500,6500]]和number = 6000,输出是True,6000在区间[5500,6500]。输是List = [[100,1100],[2000,3000]]和number = 3500,输出是 False,3500不在list的任何一个区间中。
3.代码实现

#参数List是区间列表
#参数number是待查数字
#返回值是个字符串,True或者False
class Solution:
    def isInterval(self, intervalList, number):
        high = len(intervalList) - 1
        low = 0
        while high >= low:
            if 0 < (number - intervalList[(high + low)//2][0]) <= 1000:
                return 'True'
            elif 1000 < number - intervalList[(high + low)//2][0]:
                low = (high + low) // 2 + 1
            elif 0 > number - intervalList[(high + low)//2][0]:
                high = (high + low) // 2 - 1
        return 'False'
if __name__ == '__main__':
    number = 6000
    intervalList = [[100,1100],[1000,2000],[5500,6500]]
    solution = Solution()
    print(" 区间List为:", intervalList)
    print(" 数字为:", number)
    print(" 是否在区间中:", solution.isInterval(intervalList, number)) 

4.运行结果
输入区间List为: [[100, 1100], [1000, 2000], [5500, 6500]]
输出数字为: 6000
是否在区间中: True

【例15】飞行棋 难度等级★

3.代码实现

#参数length是棋盘长度(不包含起始点)
#参数connections是跳点的集合
#返回值是个整数,代表最小步数
class Solution:
    def modernLudo(self, length, connections):
        ans = [i for i in range(length+1)]
        for i in range(length+1):
            for j in range(1,7):
                if i - j >= 0:
                    ans[i] = min(ans[i], ans[i-j]+1)
            for j in connections:
                if i == j[1]:
                    ans[i] = min(ans[i], ans[j[0]])
        return ans[length]
#参数length是棋盘长度(不包含起始点)
#参数connections是跳点的集合
#返回值是个整数,代表最小步数
#SPFA解法
class Solution:
    """
    参数length为棋盘长度
    参数connections为连接位置表
    返回最小次数
    """
    def modernLudo(self, length, connections):
        dist = [1000000000 for i in range(100050)]
        vis  = [0 for i in range(100050)]
        Q  = [0 for i in range(100050)]
        st = 0
        ed = 0        
        dist[1] =0
        vis[1] = 1 
        Q[ed] = 1;
        ed += 1
        while(st<ed) :
            u = Q[st]
            st += 1
            vis[u] = 0
            for roads in connections :
                if(roads[0] != u):
                    continue
                v = roads[1]
                if(dist[v] > dist[u]):
                    dist[v] = dist[u]
                    if(vis[v] == 0) :
                        vis[v] = 1
                        Q[ed] = v
                        ed += 1
            for i in range(1, 7):
                if (i + u > length):
                    break
                v = i + u
                if(dist[v] > dist[u] + 1) :
                    dist[v] = dist[u] + 1
                    if(vis[v] == 0):
                        vis[v] = 1
                        Q[ed] = v
                        ed += 1
        return dist[length]
if __name__ == '__main__':
    length = 15
    connections = [[2, 8],[6, 9]]
    solution = Solution()
    print(" 棋盘长度为:", length)
    print(" 连接为:", connections)
    print(" 最小需要为:", solution.modernLudo(length, connections)) 

【例16】移动石子 难度等级★

3.代码实现

#参数arr是一个列表
#返回值为整数,为最小移动次数
class Solution:
    def movingStones(self, arr):
        arr = sorted(arr)
        even = 0
        odd = 0
        for i in range(0,len(arr)):
            odd += abs(arr[i]-(2*i+1))
            even += abs(arr[i] - (2*i+2))
        if odd < even:
            return odd
        return even
if __name__ == '__main__':
arr = [1, 6, 7, 8, 9]
solution = Solution()
    print(" 数组是:", arr)
    print(" 最小移动数是:", solution.movingStones(arr))

【例17】数组剔除元素后的乘积 难度等级★

3.代码实现

class Solution:
    #参数A: 整数数组A
    #返回值: 整数数组B
    def productExcludeItself(self, A):
        length ,B  = len(A) ,[]
        f = [ 0 for i in range(length + 1)]
        f[ length ] = 1
        for i in range(length - 1 , 0 , -1):
            f[ i ] = f[ i + 1 ] * A[ i ]
        tmp = 1
        for i in range(length):
            B.append(tmp * f[ i + 1 ])
            tmp *= A[ i ]
        return B
#主函数
if __name__ == '__main__':
    solution = Solution()
    A = [1, 2, 3, 4]
    B = solution.productExcludeItself(A)
    print("输入:", A)
    print("输出:", B)

【例18】键盘的一行 难度等级★

3.代码实现

class Solution:
    #参数words为字符串列表
    #返回字符串列表
    def findWords(self, words):
        res = []
        s = ["qwertyuiop", "asdfghjkl", "zxcvbnm"]
        for w in words:
            for j in range(3):
                flag = 1
                for i in w:
                    if i.lower() not in s[j]:
                        flag = 0
                        break
                if flag == 1:
                    res.append(w)
                    break
        return res
#主函数
if __name__ == '__main__':
word = ["Hello", "Alaska", "Dad", "Peace"]
    s = Solution()
    print("输入为:",word)
    print("输出为:",s.findWords(word))

【例19】第n个数位 难度等级★

3.代码实现

class Solution:
    """
    参数n为整数
    返回整数
    """
    def findNthDigit(self, n):
        # 初始化一位数的个数为9,从1开始
        length = 1
        count = 9
        start = 1
        while n > length * count:
            # 以此类推二位数的个数为90,从10开始
            n -= length * count
            length += 1
            count *= 10
            start *= 10
        # 找到第n位数所在的整数start    
        start += (n - 1) // length
        return int(str(start)[(n - 1) % length])
#主函数
if __name__ == '__main__':
    s = Solution()
    n = 11
    print("输入为:",n)
    print("输出为:",s.findNthDigit(n))

【例20】找不同 难度等级★

3.代码实现

class Solution:
    """
    参数s为字符串
    参数t为字符串
    返回字符
    """
    def findTheDifference(self, s, t):
        flag = 0
        for i in range(len(s)):
            # 计算每一位字符的Ascll码之差
            flag += (ord(t[i]) - ord(s[i]))
        flag += ord(t[-1])
        return chr(flag)
#主函数
if __name__ == '__main__':
    s = Solution()
    n =  "abcd"
    t = "abcde"
    print("输入字符串1为:",n)
    print("输入字符串2为:",t)
    print("输出插入字符为:",s.findTheDifference(n,t))

【例21】第k个组合 难度等级★

3.代码实现

#参数k代表寻找的组数
#参数n代表有多少人
#返回值是一个列表,是目标数组数里的按序排列
class Solution:
    def getCombination(self, n, k):
        C = [[0] * (n + 1) for _ in range(n + 1)]
        for i in range(n + 1):
            C[i][0] = 1
            C[i][i] = 1
        # Compute C(m, n) using C(m, n) = C(m-1, n-1)+C(m-1, n).
        for i in range(1, n + 1):
            for j in range(1, i):
                C[i][j] = C[i - 1][j - 1] + C[i - 1][j]
        ans = []
        curr_index = 1
        for i in range(1, n // 2 + 1):
            base = C[n - curr_index][n // 2 - i]
            # Search for next digit in ans.
            while k > base:
                curr_index = curr_index + 1
                base = base + C[n - curr_index][n // 2 - i]
            base = base - C[n - curr_index][n // 2 - i]
            k = k - base;
            ans.append(curr_index)
            curr_index = curr_index + 1
        return ans
if __name__ == '__main__':
    n = 8
    k = 11
    solution = Solution()
    print(" 人数为:", n, " 找第k组:", k)
    print(" 第k组为:", solution.getCombination(n, k)) 

【例22】平面列表 难度等级★

3.代码实现

class Solution(object):
    #参数nestedList: 一个列表,列表中的每个元素都可以是一个列表或整数
    #返回值:一个整数列表
    def flatten(self, nestedList):
        stack = [nestedList]
        flatten_list = []
        while stack:
            top = stack.pop()
            if isinstance(top, list):
                for elem in reversed(top):
                    stack.append(elem)
            else:
                flatten_list.append(top)
                
        return flatten_list
#主函数
if __name__ == '__main__':
    solution = Solution()
    nums = [[1,2],2,[1,1,3]]
    flatten_list = solution.flatten(nums)
    print("输入:", nums)
    print("输出:", flatten_list)

【例23】子域名访问计数 难度等级★

2.问题示例
例如,输入[“9001 school.bupt.edu”],输出[“9001 school.bupt.edu”, “9001 bupt.edu”, “9001 edu”],只有一个域名:“school.bupt.edu”,如题所述,子域名"bupt.edu"和"edu"也会被访问,所以要访问9001次。
3.代码实现

class Solution:
    # 利用hash表,对子域名计数。注意对字符串的划分
    def subdomainVisits(self, cpdomains):
        count = {}
        for domain in cpdomains:
            visits = int(domain.split()[0])
            domain_segments = domain.split()[1].split('.')
            top_level_domain = domain_segments[-1]
            sec_level_domain = domain_segments[-2] + '.' + domain_segments[-1]
            count[top_level_domain] = count[top_level_domain] + visits if top_level_domain in count.keys() else visits
            count[sec_level_domain] = count[sec_level_domain] + visits if sec_level_domain in count.keys() else visits
            if domain.count('.') == 2:
                count[domain.split()[1]] = count[domain.split()[1]] + visits if domain.split()[1] in count.keys() else visits
        return [str(v) + ' ' + k for k,v in count.items()]
if __name__ == '__main__':
    solution=Solution()
    inputnum=["1201 school.bupt.edu"]
    print("输入为:",inputnum)
    print("输入为:",solution.subdomainVisits(inputnum))

4.运行结果
输入为: [‘1201 school.bupt.edu’]
输入为: [‘1201 edu’, ‘1201 bupt.edu’, ‘1201 school.bupt.edu’]

【例24】最长AB子串 难度等级★

3.代码实现

#参数S是待查字符串
#返回值是一个整数,是最大字符串长度
class Solution:
    def getAns(self, S):
        ans = 0
        arr = [0 for i in range(len(S))]
        sets = {}
        if S[0] == 'A':
            arr[0] = 1
            sets[1] = 0
        else:
            arr[0] = -1
            sets[-1] = 0
        for i in range(1, len(S)):
            if S[i] == 'A':
                arr[i] = arr[i - 1] + 1
                if arr[i] == 0:
                    ans = i + 1
                    continue
                if arr[i] in sets:
                    ans = max(ans, i - sets[arr[i]])
                else:
                    sets[arr[i]] = i
            else:
                arr[i] = arr[i - 1] - 1
                if arr[i] == 0:
                    ans = i + 1
                    continue
                if arr[i] in sets:
                    ans = max(ans, i - sets[arr[i]])
                else:
                    sets[arr[i]] = i
        return ans
if __name__ == '__main__':
    S = "ABABAB"
    solution = Solution()
    print(" AB字符串为:", S)
    print(" 最长AB出现次数相同的子字符串长度是:", solution.getAns(S)) 

【例25】删除字符 难度等级★

3.代码实现

#参数s是待删除字符的原字符串
#参数t是目标字符串
#返回值是一个布尔值,意为能否由s删除一些字符得到t
class Solution:
    def canGetString(self, s, t):
        pos = 0
        for x in t:
            while pos < len(s) and s[pos] != x:
                pos += 1
            if pos == len(s):
                return False
            pos += 1
        return True
if __name__ == '__main__':
    s="abc"
    t="c"
    solution = Solution()
    print(" 原string和目标string分别为:", s, t)
    print(" 能否实现:", solution.canGetString(s, t)) 

【例26】字符串写入的行数 难度等级★

3.代码实现

class Solution(object):
    def numberOfLines(self, widths, S):
        #参数widths为数组
        #参数S为字符串
        #返回数组
        line = 1
        space = 0
        flag = False
        for c in S:
            if flag:
                line += 1
                flag = False
            space += widths[ord(c) - 97]
            if space > 100:
                line += 1
                space = widths[ord(c) - 97]
            elif space == 100:
                space = 0
                flag = True
        return [line, space]
if __name__ == '__main__':
    solution=Solution()
width=[10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
    s="abcdefghijklmnopqrstuvwxyz"
    print("输入字符宽度为:",width)
    print("输入的字符串为:",s)
    print("输出为:",solution.numberOfLines(width,s))

【例27】独特的摩尔斯编码 难度等级★

3.代码实现

class Solution:
    def uniqueMorseRepresentations(self, words):
        #参数words为列表
        #返回整数
        # 用set保存出现过的摩斯码即可
        morse = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--",
                 "-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
        s = set()
        for word in words:
            tmp = ''
            for w in word:
                tmp += morse[ord(w) - 97]
            s.add(tmp)
        return len(s)
if __name__ == '__main__':
    solution=Solution()
    inputnum=["gin", "zen", "gig", "msg"]
    print("输入为:",inputnum)
    print("输出为:",solution.uniqueMorseRepresentations(inputnum))

【例28】比较字符串 难度等级★

3.代码实现

class Solution:
    #参数A : 包括大写字母的字符串
    #参数B : 包括大写字母的字符串
    #返回值: 如果字符串A包含B中的所有字符,返回True,否则返回False
    def compareStrings(self, A, B):
        if len(B) == 0:
            return True
        if len(A) == 0:
            return False
        #trackTable首先记录A中所有的字符以及它们的个数,然后遍历B,如果出现trackTable[i]小于0的情况,说明B中该字符出现的次数大于在A中出现的次数
        trackTable = [0 for _ in range(26)]
        for i in A:
            trackTable[ord(i) - 65] += 1
        for i in B:
            if trackTable[ord(i) - 65] == 0:
                return False
            else:
                trackTable[ord(i) -65] -= 1
        return True
#主函数
if __name__ == '__main__':
    solution = Solution()
    A = "ABCD"
    B = "ACD"
    print("输入:", A, B)
    print("输出:", solution.compareStrings(A,B))

【例29】能否转换 难度等级★

3.代码实现

#参数S和T为原始字符串和目标字符串
#返回值是布尔值,代表能否转换
class Solution:
    def canConvert(self, s, t):
        j = 0
        for i in range(len(s)):
            if s[i] == t[j]:
                j += 1
                if j == len(t):
                    return True
        return False
if __name__ == '__main__':
    s = "longterm"
    t = "long"
    solution = Solution()
    print(" S与T分别为:", s, t)
    print(" 能否删除得到:", solution.canConvert(s, t)) 

【例30】经典二分查找问题 难度等级★

3.代码实现

#参数nums是一个整型排序数组
#参数target是一个任意整型数
#返回值是一个整型数,若nums存在,返回该数位置;若不存在,返回-1
class Solution:
    def findPosition(self, nums, target):
        if len(nums) is 0:
            return -1
        start = 0
        end = len(nums)-1
        while start + 1 < end :
            mid = start + (end-start)//2
            if nums[mid] == target:
                end = mid
            elif nums[mid] < target:
                start = mid
            else:
                end = mid
        if nums[start] == target:
            return start
        if nums[end] == target:
            return end
        return -1
#主函数
if __name__ == '__main__':
generator=[1,2,2,4,5,5]
target = 2
solution = Solution()
print("输入:", generator)
    print("输出:", solution. myAtoi(generator, target))

【例31】抽搐词 难度等级★

3.代码实现

class Solution:
    def twitchWords(self, str):
        n = len(str)
        c = str[0]
        left = 0
        ans = []
        for i in range(n):
            if str[i] != c:
                if i - left >= 3:
                    ans.append([left, i - 1])
                c = str[i]
                left = i
        if n - left >= 3:
            ans.append([left, n - 1])
        return ans
#主函数
if __name__ == '__main__':
    str = "whooooisssbesssst"
    solution = Solution()
    print(" 输入为:", str)
    print(" 输出为:", solution.twitchWords(str))

【例32】排序数组中最接近元素 难度等级★

3.代码实现

#参数nums是一个整型排序数组
#参数target是一个整型数
#返回值是这个数组中最接近target的整数
class Solution:
    def findPosition(self, A, target):
        if not A:
            return -1
        start, end = 0,len(A)-1
        while start+ 1<end:
            mid = start +(end-start)//2
            if A[mid]<target:
                start= mid
            elif A[mid]>target:
                end = mid
            else:
                return mid
        if target-A[start]<A[end]-target:
            return start
        else:
            return end
#主函数
if __name__ == '__main__':
    generator = [1,4,6]
    target = 3
    solution = Solution()
    print("输入:", generator,",target =",target)
    print("输出:", solution.findPosition(generator, target))

【例33】构造矩形 难度等级★

3.代码实现

class Solution:
    #参数area为整数
    #返回为整数
    def constructRectangle(self, area):
        import math
        W = math.floor(math.sqrt(area))
        while area % W != 0:
            W -= 1
        return [area // W, W]
#主函数
if __name__ == '__main__':
    s = Solution()
    area =4
    print("输入面积为:",area)
    print("输出长宽为:",s.constructRectangle(area))

【例34】两个排序数组合组和的第k小元素 难度等级★

3.代码实现

#参数A,B是整型排序数组
#参数k是一个整型数,表示第k小
#返回值是数组中第k小的整数
class Solution:
    def kthSmallestSum(self, A, B, k):
        if not A or not B:
            return None
        n, m = len(A), len(B)
        minheap = [(A[0] + B[0], 0, 0)]
        visited = set([0])
        num = None
        for _ in range(k):
            num, x, y = heapq.heappop(minheap)
            if x + 1 < n and (x + 1) * m + y not in visited:
                heapq.heappush(minheap, (A[x + 1] + B[y], x + 1, y))
                visited.add((x + 1) * m + y)
            if y + 1 < m and x * m + y + 1 not in visited:
                heapq.heappush(minheap, (A[x] + B[y + 1], x, y + 1))
                visited.add(x * m + y + 1)
        return num
#主函数
if __name__ == '__main__':
generator_A = [1,7,11]
generator_B = [2,4,6]
    k = 3
    solution = Solution()
print("输入:", generator_A,generator_B)
print("k= ",k)
    print("输出:", solution.kthSmallestSum(generator_A,generator_B, k))

【例35】玩具工厂 难度等级★

3.代码实现

#参数type是一个字符串,表示不同玩具类型
#返回值是不同类型对应的玩具对象
class Toy:
    def talk(self):
        raise NotImplementedError('This method should have implemented.')
class Dog(Toy):
    def talk(self):
        print ("Wow")
class Cat(Toy):
    def talk(self):
        print ("Meow")
class ToyFactory:
    def getToy(self, type):
        if type == 'Dog':
            return Dog()
        elif type == 'Cat':
            return Cat()
        return None
#主函数
if __name__ == '__main__':
ty = ToyFactory()
type='Dog'
type1='Cat'
toy = ty.getToy(type)
print("输入:type= Dog,输出:")
toy.talk()
toy = ty.getToy(type1)
print("输入:type= Cat,输出:")
toy.talk()

【例36】形状工厂 难度等级★

3.代码实现

#参数shapeType是一个字符串,表示不同形状
#返回值是不同对象,Triangle,Square,Rectangle
class Shape:
    def draw(self):
        raise NotImplementedError('This method should have implemented.')
class Triangle(Shape):
       def draw(self):
           print("  /\\")
           print(" /  \\")
           print("/____\\")
class Rectangle(Shape):
    def draw(self):
        print(" ----")
        print("|    |")
        print(" ----")
class Square(Shape):
    def draw(self):
        print( " ----")
        print( "|    |")
        print( "|    |")
        print( " ----")
class ShapeFactory:
    def getShape(self, shapeType):
        if shapeType == "Triangle":
            return Triangle()
        elif shapeType == "Rectangle":
            return Rectangle()
        elif shapeType == "Square":
            return Square()
        else:
            return None
#主函数
if __name__ == '__main__':
    sf = ShapeFactory()
    shapeType='Triangle'
    shape = sf.getShape(shapeType)
    print("输入:type= Triangle,\n输出:")
    shape.draw()
    shapeType1='Rectangle'
    shape = sf.getShape(shapeType1)
    print("输入:type= Rectangle,\n输出:")
    shape.draw()
    shapeType2='Square'
    shape = sf.getShape(shapeType2)
    print("输入:type= Square,\n输出:")
    shape.draw()

【例37】二叉树最长连续序列 难度等级★

3.代码实现

#参数root是一个二叉树的根
#返回值是此二叉树中最长连续序列
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None
class Solution:
    def longestConsecutive(self, root):
        return self.helper(root, None, 0)
    def helper(self, root, parent, len):
        if root is None:
            return len
        if parent != None and root.val == parent.val + 1:
            len += 1
        else:
            len = 1
        return max(len, max(self.helper(root.left, root, len), \
                            self.helper(root.right, root, len)))
#主函数
if __name__ == '__main__':
    root = TreeNode(1)
    root.right = TreeNode(3)
    root.right.left = TreeNode(2)
    root.right.right = TreeNode(4)
    root.right.right.right = TreeNode(5)
solution= Solution()
print("输入是: {1,#,3,2,4,#,#,#,5}")
print("输出是:", solution.longestConsecutive(root))

【例38】首字母大写 难度等级★

3.代码实现

class Solution:
    #参数s为字符串
    #返回字符串
    def capitalizesFirst(self, s):
        n = len(s)
        s1 = list(s)
        if s1[0] >= 'a' and s1[0] <= 'z':
            s1[0] = chr(ord(s1[0]) - 32)
        for i in range(1, n):
            if s1[i - 1] == ' ' and s1[i] != ' ':
                s1[i] = chr(ord(s1[i]) - 32)
        return ''.join(s1)
if __name__ == '__main__':
    s = "i am from bupt"
    solution = Solution()
    print("输入为:",s)
    print("输出为:",solution.capitalizesFirst(s))

【例39】7进制 难度等级★

3.代码实现

class Solution:
    #参数num为10进制整数
    #返回7进制整数
    #不断执行对7取模和取整操作,直到商小于7
    def convertToBase7(self, num):
        if num < 0: 
            return '-' + self.convertToBase7(-num)
        if num < 7: 
            return str(num)
        return self.convertToBase7(num // 7) + str(num % 7)
if __name__ == '__main__':
    num = 777
    solution = Solution()
    print("输入为:",num)
    print("输出为:",solution.convertToBase7(num))

【例40】查找数组中没有出现的所有数字 难度等级★

3.代码实现

class Solution:
    #参数为nums整数列表
    #返回整数列表
    def findDisappearedNumbers(self, nums):
        n = len(nums)
        s = set(nums)
        res = [i for i in range(1, n+1) if i not in s]
        return res
#主函数
if __name__ == '__main__':
    s = Solution()
    n = [4,3,2,7,8,2,3,1]
    print("输入为:",n)
    print("输出为:",s.findDisappearedNumbers(n))

【例41】回旋镖的数量 难度等级★

3.代码实现

class Solution(object):
    def getDistance(self, a, b):
        dx = a[0] - b[0]
        dy = a[1] - b[1]
        return dx * dx + dy * dy
    def numberOfBoomerangs(self, points):
        #参数points为整数列表
        #返回整数
        if points == None:
            return 0
        ans = 0
        for i in range(len(points)):
            disCount = {}
            for j in range(len(points)):
                if i == j:
                    continue
                distance = self.getDistance(points[i], points[j])
                count = disCount.get(distance, 0)
                disCount[distance] = count + 1
            for distance in disCount:
                ans += disCount[distance] * (disCount[distance] - 1)
        return ans
#主函数
if __name__ == '__main__':
    s = Solution()
    n = [[0,0],[1,0],[2,0]]
    print("输入为:",n)
    print("输出为:",s.numberOfBoomerangs(n))

【例42】合并排序数组 难度等级★

3.代码实现

class Solution:
    #参数A: 已排序整数数组A有m个元素,但是A的大小是m+n
    #参数m: 整数
    #参数B: 已排序整数数组B,它有n个元素
    #参数n: 整数
    #返回值: 无
    def mergeSortedArray(self, A, m, B, n):
        i, j = m-1, n-1
        t = len(A)-1
        while i >= 0 or j >= 0:
            if i < 0 or (j >= 0 and B[j] > A[i]):
                A[t] = B[j]
                j -= 1
            else:
                A[t] = A[i]
                i -= 1
            t -= 1
#主函数
if __name__ == '__main__':
    solution = Solution()
    A = [1,2,3,0,0]
    m = 3
    B = [4,5]
    n = 2
    solution.mergeSortedArray(A, m, B, n)
    print("输入:A = [1,2,3,0,0],  3,  B = [4,5],  2")
    print("输出:", A)

【例43】最小路径和 难度等级★

3.代码实现

class Solution:
    #参数grid: 二维整数数组
    #返回值: 一个整数,使其路径上的所有数字之和最小化
    def minPathSum(self, grid):
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if i == 0 and j > 0:
                    grid[i][j] += grid[i][j-1]
                elif j == 0 and i > 0:
                    grid[i][j] += grid[i-1][j]
                elif i > 0 and j > 0:
                    grid[i][j] += min(grid[i-1][j], grid[i][j-1])
        return grid[len(grid) - 1][len(grid[0]) - 1]
#主函数
if __name__ == '__main__':
    solution = Solution()
    grid = [[1,3,1],[1,5,1],[4,2,1]]
    length = solution.minPathSum(grid)
    print("输入:", grid)
    print("输出:", length)

【例44】大小写转换 难度等级★

3.代码实现

class Solution:
    #参数character: 字符
    #返回值: 字符
    def lowercaseToUppercase(self, character):
        #ASCII码中小写字母与对应的大写字母相差32
        return chr(ord(character) - 32)
#主函数
if __name__ == '__main__':
    solution = Solution()
    ans = solution.lowercaseToUppercase('a')
        print("输入: a")
        print("输出:", ans)

【例45】原子的数量 难度等级★

3.代码实现

import re
import collections
class Solution(object):
    def countOfAtoms(self, formula):
        parse = re.findall(r"([A-Z][a-z]*)(\d*)|(\()|(\))(\d*)", formula)
        stack = [collections.Counter()]
        for name, m1, left_open, right_open, m2 in parse:
            if name:
              stack[-1][name] += int(m1 or 1)
            if left_open:
              stack.append(collections.Counter())
            if right_open:
                top = stack.pop()
                for k in top:
                  stack[-1][k] += top[k] * int(m2 or 1)
        return "".join(name + (str(stack[-1][name]) if stack[-1][name] > 1 else '') for name in sorted(stack[-1]))
#主函数
if __name__ == '__main__':
    solution = Solution()
    Test_in = "H2O"
    Test_out = solution.countOfAtoms(Test_in)
    print("输入为:",Test_in)
    print("输出为:",Test_out)

【例46】矩阵中的最长递增路径 难度等级★

3.代码实现

DIRECTIONS = [(1, 0), (-1, 0), (0, -1), (0, 1)]
class Solution:
    """
    参数matrix为整数矩阵
    返回整数
    """
    def longestIncreasingPath(self, matrix):
        if not matrix or not matrix[0]:
            return 0
        sequence = []
        for i in range(len(matrix)):
            for j in range(len(matrix[0])):
                sequence.append((matrix[i][j], i, j))
        sequence.sort()
        check = {}
        for h, x, y in sequence:
            cur_pos = (x, y)
            if cur_pos not in check:
                check[cur_pos] = 1
            cur_path = 0
            for dx, dy in DIRECTIONS:
                if self.is_valid(x+dx, y+dy, matrix, h):
                    cur_path = max(cur_path, check[(x+dx, y+dy)])
            check[cur_pos] += cur_path
        vals = check.values()
        return max(vals)
    def is_valid(self, x, y, matrix, h):
        row, col = len(matrix), len(matrix[0])
        return x >= 0 and x < row and y >= 0 and y < col and matrix[x][y]<h
#主函数
if __name__ == '__main__':
    solution = Solution()
    Test_in = [
      [9,9,4],
      [6,6,8],
      [2,1,1]
    ]
    Test_out = solution.longestIncreasingPath(Test_in)
    print("输入为:",Test_in)
    print("输出为:",Test_out)

【例47】大小写转换 难度等级★

3.代码实现

class Solution:
    #参数str: 字符串
    #返回值: 字符串
    def lowercaseToUppercase2(self, str):
        p = list(str)
        #遍历整个字符串,将所有的小写字母转成大写字母
        for i in range(len(p)):
            if p[i] >= 'a' and p[i] <= 'z':
                p[i] = chr(ord(p[i]) - 32)
        return ''.join(p)
#主函数
if __name__ == '__main__':
    solution = Solution()
    s1 = "abC12"
    ans = solution.lowercaseToUppercase2(s1)
    print("输入:", s1)
    print("输出:", ans)

【例48】水仙花数 难度等级★

3.代码实现

class Solution:
    #参数n: 数字的位数
    @返回值: 所有n位数的水仙花数
    def getNarcissisticNumbers(self, n):
        res = []
        for x in range([0, 10**(n-1)][n > 1], 10**n):
            y, k = x, 0
            while x > 0:
                k += (x % 10)**n
                x //= 10
            if k == y: res.append(k)
        return res
#主函数
if __name__ == '__main__':
    solution = Solution()
    n = 4
    ans = solution.getNarcissisticNumbers(n)
    print("输入:", n)
    print("输出:", ans)

【例49】余弦相似度 难度等级★

3.代码实现

import math
#参数A,B都是一个整型数组,表示两个矢量
#返回值是两个输入矢量的余弦相似度
class Solution:
    def cosineSimilarity(self, A, B):
        if len(A) != len(B):
            return 2
        n = len(A)
        up = 0
        for i in range(n):
            up += A[i] * B[i]
        down = sum(a*a for a in A) * sum(b*b for b in B)
        if down == 0:
            return 2
        return up / math.sqrt(down)
#主函数
if __name__ == '__main__':
generator_A = [1,4,0]
    generator_B = [1,2,3]
    solution = Solution()
    print("输入: A=", generator_A)
    print("输入: B=", generator_B)
    print("输出: ", solution.cosineSimilarity(generator_A,generator_B))

【例50】链表节点计数 难度等级★

3.代码实现

#参数head是链表的头部
#返回值是链表的长度
class ListNode(object):
    def __init__(self, val, next=None):
        self.val = val
        self.next = next
class Solution:
    def countNodes(self, head):
        cnt = 0
        while head is not None:
            cnt += 1
            head = head.next
        return cnt
#主函数
if __name__ == '__main__':
    node1 = ListNode(1)
    node2 = ListNode(2)
    node3 = ListNode(3)
    node4 = ListNode(4)
    node1.next = node2
    node2.next = node3
    node3.next = node4
solution = Solution()
print("输入: ", node1.val,node2.val,node3.val,node4.val)
    print("输出: ", solution. countNodes(node1))

【例51】最高频的K个单词 难度等级★

3.代码实现

#参数words是一个字符串数组
#参数k代表第k高频率出现
#返回值是一个字符串数组,表示出现频率前k高字符串
class Solution:
    def topKFrequentWords(self, words, k):
        dict = {}
        res = []
        for word in words:
            if word not in dict:
                dict[word] = 1
            else:
                dict[word] += 1
        sorted_d = sorted(dict.items(), key=lambda x:x[1], reverse=True)
        for i in range(k):
            res.append(sorted_d[i][0])
        return res
#主函数
if __name__ == '__main__':
generator = ["yes", "long", "code",
                 "yes", "code", "baby",
                 "you", "baby", "chrome",
                 "safari", "long", "code",
                 "body", "long", "code"]
k = 4
solution = Solution()
print("输入: ", generator)
print("输入: ","k = ", k)
print("输出: ", solution.topKFrequentWords(generator,k))

【例52】单词的添加与查找 难度等级★

3.代码实现

#参数word是要添加的的单词
#返回值是个布尔值,查找单词成功则返回True,否则,返回False
class TrieNode:
    def __init__(self):
        self.children = {}
        self.is_word = False
class WordDictionary:
    def __init__(self):
        self.root = TrieNode()
    def addWord(self, word):
        node = self.root
        for c in word:
            if c not in node.children:
                node.children[c] = TrieNode()
            node = node.children[c]
        node.is_word =True
    def search(self, word):
        if word is None:
            return False
        return self.search_helper(self.root, word, 0)
    def search_helper(self, node, word, index):
        if node is None:
            return False
        if index >= len(word):
            return node.is_word
        char = word[index]
        if char != '.':
            return self.search_helper(node.children.get(char), word, index + 1)
        for child in node.children:
            if self.search_helper(node.children[child], word, index + 1):
                return True
        return False
#主函数
if __name__ == '__main__':
    solution = WordDictionary()
    solution.addWord("bad")
    solution.addWord("dad")
    solution.addWord("mad")
    print('输入: addWord("bad"),addWord("dad"),addWord("mad")')
    print('输入: search("pad"),search("dad"),search(".ad"),search("b..")')
    print("输出: ",
    solution.search("pad"),
    solution.search("bad"),
    solution.search(".ad"),
    solution.search("b.."))

【例53】石子归并 难度等级★

3.代码实现

#参数A是一个整型数组
#返回值是一个整数,表示最小的合并代价
import sys
class Solution:
    def stoneGame(self, A):
        n = len(A)
        if n < 2:
            return 0
        dp = [[0] * n for _ in range(n)]
        cut = [[0] * n for _ in range(n)]
        range_sum = self.get_range_sum(A)
        for i in range(n - 1):
            dp[i][i + 1] = A[i] + A[i + 1]
            cut[i][i + 1] = i
        for length in range(3, n + 1):
            for i in range(n - length + 1):
                j = i + length - 1
                dp[i][j] = sys.maxsize
                for mid in range(cut[i][j - 1], cut[i + 1][j] + 1):
                    if dp[i][j] > dp[i][mid] + dp[mid + 1][j] + range_sum[i][j]:
                        dp[i][j] = dp[i][mid] + dp[mid + 1][j] + range_sum[i][j]
                        cut[i][j] = mid
        return dp[0][n - 1]
    def get_range_sum(self, A):
        n = len(A)
        range_sum = [[0] * n for _ in range(len(A))]
        for i in range(n):
            range_sum[i][i] = A[i]
            for j in range(i + 1, n):
                range_sum[i][j] = range_sum[i][j - 1] + A[j]
        return range_sum
#主函数
if __name__ == '__main__':
generator = [3,4,3]
solution = Solution()
print("输入:", generator)
print("输出:", solution.stoneGame(generator))

【例54】简单计算器 难度等级★

3.代码实现

#参数a,b是两个任意整数
#operator是运算符+, -, *, /
#返回值是浮点型运算结果
class Solution:
    def calculate(self, a, operator, b):
        if operator == '+':
            return a + b
        elif operator == '-':
            return a - b
        elif operator == '*':
            return a * b
        elif operator == '/':
            return a / b
#主函数
if __name__ == '__main__':
a=8
b=3
operator1='+'
operator2='-'
operator3='*'
operator4='/'solution = Solution()
print("输入:", a ,operator1 ,b)
print("输出:", solution.calculate(a,operator1,b))
print("输入:", a ,operator2 ,b)
print("输出:", solution.calculate(a,operator2,b))
print("输入:", a ,operator3 ,b)
print("输出:", solution.calculate(a,operator3,b))
print("输入:", a ,operator4 ,b)
print("输出:", solution.calculate(a,operator4,b))

【例55】数组第二大数 难度等级★

3.代码实现

#参数nums是一个整型数组
#返回值secValue是数组中第二大数
class Solution:
    def secondMax(self, nums):
        maxValue = max(nums[0], nums[1])
        secValue = min(nums[0], nums[1])
        for i in range(2, len(nums)):
            if nums[i] > maxValue:
                secValue = maxValue
                maxValue = nums[i]
            elif nums[i] > secValue:
                secValue = nums[i]
        return secValue
#主函数
if __name__ == '__main__':
    generator = [3,4,7,9]
    solution = Solution()
    print("输入: ", generator)
    print("输出: ", solution.secondMax(generator))

【例56】二叉树叶子节点之和 难度等级★

3.代码实现

#参数root是二叉树的根
#返回值是个整数,叶子节点之和
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
class Solution:
    def leafSum(self, root):
        p = []
        self.dfs(root, p)
        return sum(p)
    def dfs(self, root, p):
        if root is None:
            return
        if root.left is None and root.right is None:
            p.append(root.val)
        self.dfs(root.left, p)
        self.dfs(root.right, p)
#主函数
if __name__ == '__main__':
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
solution = Solution()
print("输入:", root.val,root.left.val,root.right.val,root.left.left.val)
print("输出:", solution.leafSum(root))

【例57】二叉树的某层节点之和 难度等级★

3.代码实现

#参数root是二叉树的根
#参数level是树的目标层的深度
#返回值是一个整数,表示该level叶子节点之和
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
class Solution:
    def levelSum(self, root, level):
        p = []
        self.dfs(root, p, 1, level)
        return sum(p)
    def dfs(self, root, p, dep, level):
        if root is None:
            return
        if dep == level:
            p.append(root.val)
            return
        self.dfs(root.left, p, dep+1, level)
        self.dfs(root.right, p, dep+1, level)
#主函数
if __name__ == '__main__':
    root = TreeNode(1)
    root.left = TreeNode(2)
    root.right = TreeNode(3)
    root.left.left = TreeNode(4)
    root.left.right = TreeNode(5)
    root.right.left = TreeNode(6)
    root.right.right = TreeNode(7)
    root.left.right.right = TreeNode(8)
    root.right.right.right = TreeNode(9)
    depth = 3
    solution = Solution()
    print("输入:",root.val,root.left.val,root.right.val,root.left.left.val,
          root.left.right.val,root.right.left.val,root.right.right.val,
          root.left.right.right.val,root.right.right.right.val)
print("输入: depth= ", depth)
     print("输出:",solution.levelSum(root,depth))

【例58】判断尾数 难度等级★

3.代码实现

#参数str是输入01串
#返回值是一个整数,代表最后一个词的长度
class Solution:
    def judgeTheLastNumber(self, str):
        if str[-1] == 1:
            return 2
        for i in range(-2, -len(str) - 1, -1):
            if str[i] == 0:
                return -1 * ((i * -1 + 1) % 2) + 2
        return -1 * (len(str) % 2) + 2
if __name__ == '__main__':
    str = "111110"
    solution = Solution()
    print(" 原01串为:", str)
    print(" 最后一个词长度是:", solution.judgeTheLastNumber(str)) 

【例59】两个字符串是变位词 难度等级★

3.代码实现

class Solution:
    #参数s: 第一个字符串
    #参数t: 第二个字符串
    #返回值: True或False
    def anagram(self, s, t):
        set_s = [0] * 256
        set_t = [0] * 256
        for i in range(0, len(s)):
            set_s[ord(s[i])] += 1
        for i in range(0, len(t)):
            set_t[ord(t[i])] += 1
        for i in range(0, 256):
            if set_s[i] != set_t[i]:
                return False
        return True
#主函数
if __name__ == '__main__':
    solution = Solution()
    s = "abcd"
    t = "dcba"
    ans = solution.anagram(s, t)
    print("输入:", s, t)
    print("输出:", ans)

【例60】最长单词 难度等级★

3.代码实现

class Solution:
    #参数dictionary: 字符串数组
    #返回值: 字符串数组
    def longestWords(self, dictionary):
        answer = []
        maxLength = 0
        for item in dictionary:
            if len(item) > maxLength:
                maxLength = len(item)
                answer = [item]
            elif len(item) == maxLength:
                answer.append(item)
        return answer
#主函数
if __name__ == '__main__':
    solution = Solution()
    dic = ["dog","google","facebook","internationalization","blabla"]
    answer = solution.longestWords(dic)
    print("输入:", dic)
    print("输出:", answer)

【例61】机器人能否返回原点 难度等级★

3.代码实现

class Solution:
    #参数moves为字符串
    #返回布尔类型
    def judgeCircle(self, moves):
        count_RL = count_UD = 0
        for c in moves:
            if c == 'R':
                count_RL += 1
            if c == 'L':
                count_RL -= 1
            if c == 'U':
                count_UD += 1
            if c == 'D':
                count_UD -= 1
        return count_RL == 0 and count_UD == 0
if __name__ == '__main__':
    solution=Solution()
    moves="UD"
    print("输入为:",moves)
print("输出为:",solution.judgeCircle(moves))

【例62】链表倒数第n个节点 难度等级★

3.代码实现

#定义链表节点
class ListNode(object):
    def __init__(self, val):
        self.val = val
        self.next = None
class Solution:
    #参数head: 链表的第一个节点。
    #参数n: 整数
    #返回值: 单链表的第n到最后一个节点。 
    def nthToLast(self, head, n):
        if head is None or n < 1:
            return None
        cur = head.next
        while cur is not None:
            cur.pre = head
            cur = cur.next
            head = head.next
        n -= 1
        while n > 0:
            head = head.pre
            n -= 1
        return head
#主函数
if __name__ == '__main__':
    solution = Solution()
    l0 = ListNode(3)
    l1 = ListNode(2)
    l2 = ListNode(1)
    l3 = ListNode(5)
    l0.next = l1
    l1.next = l2
    l2.next = l3
    ans = solution.nthToLast(l0, 2).val
    print("输入: 3->2->1->5->null,  n = 2")
    print("输出:", ans)

【例63】链表求和 难度等级★

3.代码实现

#定义链表节点
class ListNode(object):
    def __init__(self, val):
        self.val = val
        self.next = None
class Solution:
    def addLists(self, l1, l2) -> list:
        dummy = ListNode(None)
        tail = dummy
        carry = 0 
        while l1 or l2 or carry:
            num = 0 
            if l1:
                num += l1.val 
                l1 = l1.next
            if l2:
                num += l2.val 
                l2 = l2.next
            num += carry
            digit, carry = num % 10, num // 10
            node = ListNode(digit)
            tail.next, tail = node, node 
        return dummy.next
#主函数
if __name__ == '__main__':
    solution = Solution()
    l0 = ListNode(7)
    l1 = ListNode(1)
    l2 = ListNode(6)
    l0.next = l1
    l1.next = l2
    l3 = ListNode(5)
    l4 = ListNode(9)
    l5 = ListNode(2)
    l3.next = l4
    l4.next = l5
    ans = solution.addLists(l0, l3)
    a = [ans.val, ans.next.val, ans.next.next.val]
    print("输入: 7->1->6->null,  5->9->2->null")
    print("输出: 2->1->9->null")

【例64】删除元素 难度等级★

3.代码实现

class Solution:
    #参数A: 整数列表
    #参数elem: 整数
    #返回值:移除后的长度
    def removeElement(self, A, elem):
        j = len(A)-1
        for i in range(len(A) - 1, -1, -1):
            if A[i] == elem:
                A[i], A[j] = A[j], A[i]
                j -= 1
        return j+1
#主函数
if __name__ == '__main__':
    solution = Solution()
    A = [0,4,4,0,0,2,4,4]
    e = 4
    ans = solution.removeElement(A, e)
    print("输入: [0,4,4,0,0,2,4,4],  value = 4")
    print("输出:", ans)

【例65】克隆二叉树 难度等级★

3.代码实现

#树的节点结构
#参数val是节点值
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
#参数{TreeNode} root是二进制树的根
#返回值clone_root是复制后新树的根
class Solution:
    def cloneTree(self, root):
        if root is None:
            return None
        clone_root = TreeNode(root.val)
        clone_root.left = self.cloneTree(root.left)
        clone_root.right = self.cloneTree(root.right)
        return clone_root
#主函数
if __name__ == '__main__':
    root = TreeNode(1)
    root.left = TreeNode(2)
    root.right = TreeNode(3)
    root.left.left = TreeNode(4)
    root.left.right = TreeNode(5)
    solution = Solution()
    print("输入:", root.val,root.left.val,root.right.val,root.left.left.val,root.left.right.val)
    print("输出: ", solution.cloneTree(root).val,solution.cloneTree(root).left.val,solution.cloneTree(root).right.val,solution.cloneTree(root).left.left.val,solution.cloneTree(root).left.right.val)

【例66】合并两个排序链表 难度等级★

3.代码实现

#定义链表节点
class ListNode(object):
    def __init__(self, val):
        self.val = val
        self.next = None
class Solution(object):
    #参数l1: 链表头结节点
    #参数l2: 链表头节点
    #返回值: 链表头节点
    def mergeTwoLists(self, l1, l2):
        dummy = ListNode(0)
        tmp = dummy
        while l1 != None and l2 != None:
            if l1.val < l2.val:
                tmp.next = l1
                l1 = l1.next
            else:
                tmp.next = l2
                l2 = l2.next
            tmp = tmp.next
        if l1 != None:
            tmp.next = l1
        else:
            tmp.next = l2
        return dummy.next
#主函数
if __name__ == '__main__':
    solution = Solution()
    l0 = ListNode(1)
    l1 = ListNode(3)
    l2 = ListNode(8)
    l0.next = l1
    l1.next = l2
    l5 = ListNode(2)
    l6 = ListNode(4)
    l5.next = l6
    ans = solution.mergeTwoLists(l0, l5)
    a = [ans.val, ans.next.val, ans.next.next.val, 
         ans.next.next.next.val, ans.next.next.next.next.val]
    print("输入: list1 = 1->3->8->null,  list2 = 2->4->null")
    print("输出: 1->2->3->4->8->null")

【例67】反转整数 难度等级★

3.代码实现

#参数n是一个整型数
#返回值reverse是反转的整数
class Solution:
    def reverseInteger(self, n):
        if n == 0:
            return 0
        neg = 1
        if n < 0:
            neg, n = -1, -n
        reverse = 0
        while n > 0:
            reverse = reverse * 10 + n % 10
            n = n // 10
        reverse = reverse * neg
        if reverse < -(1 << 31) or reverse > (1 << 31) - 1:
            return 0
        return reverse
#主函数
if __name__ == '__main__':
    generator=1234
solution = Solution()
print("输入:", generator)
print("输出:", solution. reverseInteger(generator))

【例68】报数 难度等级★

3.代码实现

#参数n是一个正整数
#返回值string是n所表示的报数序列
class Solution:
    def countAndSay(self, n):
        string = '1'
        for i in range(n - 1):
            a = string[0]
            count = 0
            s = ''
            for ch in string:
                if a == ch:
                    count += 1
                else:
                    s += str(count) + a
                    a = ch
                    count = 1
            s += str(count) + a
            string = s
            a = string[0]
        return string
#主函数
if __name__ == '__main__':
    generator=5
solution = Solution()
print("输入:", generator)
print("输出:", solution.countAndSay(generator))

【例69】完全二叉树 难度等级★

3.代码实现

#参数root是二叉树的根
#返回值是个布尔值,当完全二叉树时返回True,否则返回False
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None
class Solution:
    def isComplete(self, root):
        if root is None:
            return True
        queue = [root]
        index = 0
        while index < len(queue):
            if queue[index] is not None:
                queue.append(queue[index].left)
                queue.append(queue[index].right)
            index += 1
        while queue[-1] is None:
            queue.pop()
        for q in queue:
            if q is None:
                return False
        return True
#主函数
if __name__ == '__main__':
root = TreeNode(1)
    root.left = TreeNode(2)
    root.right = TreeNode(3)
    root.left.left = TreeNode(4)
    solution = Solution()
print("输入: ", root.val,root.left.val,root.right.val,root.left.left.val)
print("输出: ", solution.isComplete(root))

【例70】对称二叉树 难度等级★

3.代码实现

#参数root是二叉树的的根
#返回值是个布尔值,是对称二叉树时返回True,否则返回False
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None
class Solution:
    def help(self, p, q):
        if p == None and q == None: return True
        if p and q and p.val == q.val:
            return self.help(p.right, q.left) and self.help(p.left, q.right)
        return False
    def isSymmetric(self, root):
        if root:
            return self.help(root.left, root.right)
        return True
#主函数
if __name__ == '__main__':
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(2)
root.right.right = TreeNode(3)
root.right.left = TreeNode(4)
root.left.right = TreeNode(4)
root.left.left = TreeNode(3)
solution = Solution()
print("输入: ", 
root.val,root.left.val,root.right.val,root.left.left.val,root.left.right. val,root.right.left.val, root.right.right.val)
print("输出: ", solution.isSymmetric(root))

【例71】扭转后等价的二叉树 难度等级★

3.代码实现

#参数a、b是二叉树的根
#返回值是个布尔值,当它们等价时返回True,否则返回False
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None
class Solution:
    def isTweakedIdentical(self, a, b):
        if a == None and b == None: return True
        if a and b and a.val == b.val:
            return self.isTweakedIdentical(a.left, b.left) and \
                self.isTweakedIdentical(a.right, b.right) or \
                self.isTweakedIdentical(a.left, b.right) and \
                self.isTweakedIdentical(a.right, b.left)
        return False
#主函数
if __name__ == '__main__':
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root1 = TreeNode(1)
root1.right = TreeNode(2)
root1.left = TreeNode(3)
root1.right.right = TreeNode(4)
solution = Solution()
print("输入: ", root.val,root.left.val,root.right.val,root.left.left.val," , ",root1.val,root1.left.val,root1.right.val,root1.right.right.val)
print("输出: ", solution.isTweakedIdentical(root,root1))

【例72】岛屿的个数 难度等级★

3.代码实现

from collections import deque
#参数grid是一个01矩阵
#返回值islands是岛屿的个数
class Solution:
    def numIslands(self, grid):
        if not grid or not grid[0]:
            return 0
        islands = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j]:
                    self.bfs(grid, i, j)
                    islands += 1
        return islands
    def bfs(self, grid, x, y):
        queue = deque([(x, y)])
        grid[x][y] = False
        while queue:
            x, y = queue.popleft()
            for delta_x, delta_y in [(1, 0), (0, -1), (-1, 0), (0, 1)]:
                next_x = x + delta_x
                next_y = y + delta_y
                if not self.is_valid(grid, next_x, next_y):
                    continue
                queue.append((next_x, next_y))
                grid[next_x][next_y] = False
    def is_valid(self, grid, x, y):
        n, m = len(grid), len(grid[0])
        return 0 <= x < n and 0 <= y < m and grid[x][y]
#主函数
if __name__ == '__main__':
    generator= [
  				[1,1,0,0,0],
  				[0,1,0,0,1],
  				[0,0,0,1,1],
  				[0,0,0,0,0],
  				[0,0,0,0,1]
]
solution = Solution()
print("输入:", generator)
print("输出:", solution.numIslands(generator))

【例73】判断是否为平方数之和 难度等级★

3.代码实现

import math
class Solution:
    """
    参数num为整数
    返回布尔类型
    """
    def checkSumOfSquareNumbers(self, num):
        # write your code here
        if num < 0:
            return False
        for i in reversed(range(0, int(math.sqrt(num)) + 1)):
            if i * i == num:
                return True
            j = num - i * i
            k = int(math.sqrt(j))
            if k * k == j:
                return True
        return False
if __name__=='__main__':
	solution=Solution()
	num=5
	print("输入为:",num)
	print("输出为:",solution.checkSumOfSquareNumbers(num))

【例74】滑动窗口内数的和 难度等级★

3.代码实现

class Solution:
    #nums是整数数组
    #k是滑动窗口
    #返回每个窗口的数字和
    def winSum(self, nums, k):
        n = len(nums)
        if n < k or k <= 0:
            return []
        sums = [0] * (n - k + 1)
        for i in range(k):
            sums[0] += nums[i];
        for i in range(1, n - k + 1):
            sums[i] = sums[i - 1] - nums[i - 1] + nums[i + k - 1]
        return sums
#主函数
if __name__ == '__main__':
    inputnum=[1,2,7,8,5]
    k=3
    print("输入数组:",inputnum)
    print("输入窗口:",k)
    solution=Solution()
    print("输出数组:",solution.winSum(inputnum,k))

4.运行结果
输入数组:[1, 2, 7, 8, 5]
输入窗口:3
输出数组:[10, 17, 20]

【例75】单词拆分 难度等级★★

.代码实现

class Solution:
    """
    参数s为字符串
    参数dict为单词列表
    返回整数数量
    """
    def wordBreak3(self, s, dict):
        if not s or not dict:
            return 0
        n, hash = len(s), set()
        lowerS = s.lower()
        for d in dict:
            hash.add(d.lower())
        f = [[0] * n for _ in range(n)]
        for i in range(n):
            for j in range(i, n):
                sub = lowerS[i:j + 1]
                if sub in hash:
                    f[i][j] = 1
        for i in range(n):
            for j in range(i, n):
                for k in range(i, j):
                    f[i][j] += f[i][k] * f[k + 1][j]
        return f[0][-1]
if __name__=='__main__':
	solution=Solution()
	s="CatMat"
	dict1=["Cat", "Mat", "Ca", "tM", "at", "C", "Dog", "og", "Do"]
	print("输入句子为:",s)
	print("输入列表为:",dict1)
	print("输出数量为:",solution.wordBreak3(s,dict1))

【例76】硬币摆放 难度等级★

3.代码实现

import math
class Solution:
    #参数n为整数
    #返回整数
    # n = (1 + x) * x / 2, 求得 x = (-1 + sqrt(8 * n + 1)) / 2, 对x取整
    def arrangeCoins(self, n):
        return math.floor((-1 + math.sqrt(1 + 8*n)) / 2)
if __name__ == '__main__':
    n = 10
    solution = Solution()
    print("输入为:",n)
    print("输出为:",solution.arrangeCoins(n))

【例77】字母大小写转换 难度等级★

3.代码实现

class Solution(object):
    def letterCasePermutation(self, S):
        #参数S为字符串
        #返回字符串列表
        # 利用二进制对应字符串。其中0表示大小写不变,1表示改变大小写
        res = []
        indices = []
        indices = [i for i,_ in enumerate(S) if S[i].isalpha()]
        for i in range(0, pow(2,len(indices))):
            if i==0:
                res.append(S)
            else:
                j=i;bpos=0;nsl=list(S)
                while j>0:
                    ci2c = indices[bpos]
                    if j&1 and S[ci2c].islower():
                        nsl[ci2c]=S[ci2c].upper()
                    elif j&1 and S[ci2c].isupper():
                        nsl[ci2c]=S[ci2c].lower()
                    bpos+=1
                    j = j >> 1
                res.append("".join(nsl))
        return res
if __name__ == '__main__':
    solution=Solution()
    S = "a1b2"
    print("输入为:",S)
    print("输出为:",solution.letterCasePermutation(S))

4.运行结果
输入为: a1b2
输出为: [‘a1b2’, ‘A1b2’, ‘a1B2’, ‘A1B2’]

【例78】二进制表示中质数个计算置位 难度等级★

3.代码实现

class Solution(object):
    def countPrimeSetBits(self, L, R):
        # "L, R在[1, 10^6]范围
        # 可能的质数为2, 3, 5, 7, 11, 13, 17, 19.
        # 统计1的个数在进行质数判定,因为二进制1的个数不会超过20个,枚举质数即可
        k = 0
        for n in range(L, R + 1):
            if bin(n).count('1') in [2, 3, 5, 7, 11, 13, 17, 19]:
                k = k + 1
        return k
if __name__ == '__main__':
    solution=Solution()
    L=6
    R=10
    print("输入为:[",L,R,"]")
    print("输出为:",solution.countPrimeSetBits(L,R))

4.运行结果
输入为:[ 6 10 ]
输出为:4

【例79】最少费用的爬台阶方法 难度等级★

3.代码实现

class Solution:
    #参数cost为数组
    #返回最小费用
    #状态转移方程 dp[i] = min(dp[i-1] + cost[i-1],dp[i-2] + cost[i-2])
    def minCostClimbingStairs(self, cost):
        a, b = 0, 0
        for i in range(2, len(cost) + 1):
            c = min(a + cost[i - 2], b + cost[i - 1])
            a, b = b, c
        return b
if __name__ == '__main__':
    solution=Solution()
    print("输入为:",cost)
    print("输出为:",solution.minCostClimbingStairs(cost))

4.运行结果
输入为:[1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出为:6

【例80】中心索引 难度等级★

3.代码实现

class Solution(object):
    def pivotIndex(self, nums):
        left, right = 0, sum(nums)
        for index, num in enumerate(nums):
            right -= num
            if left == right:
                return index
            left += num
        return -1
if __name__ == '__main__':
    solution=Solution()
    words=[1,7,3,6,5,6]
    print(solution.pivotIndex(words))

【例81】词典中最长的单词 难度等级★

3.代码实现

class Solution(object):
    def longestWord(self, words):
        words.sort()
        words.sort(key=len, reverse=True)
        res = []
        for word in words:
            temp = word
            i = 1
            for i in range(len(temp)):
                if temp[:len(temp) - i] in words:
                    if i == len(temp) - 1:
                        return temp
                    continue
                else:
                    break
        return ''
if __name__ == '__main__':
    solution=Solution()
    words=["w","wo","wor","worl", "world"]
    print("输入字典为:",words)
    print("输出单词为:",solution.longestWord(words))

【例82】重复字符串匹配 难度等级★

3.代码实现

class Solution:
    #参数A为字符串
    #参数B为字符串
    #返回整数
    def repeatedStringMatch(self, A, B):
        C = ""
        for i in range(int(len(B)/len(A) + 3)):
            if B in C:
                return i
            C += A
        return -1
if __name__ == '__main__':
    solution=Solution()
    A = "abcd"
    B = "cdabcdab"
    print("输入字符串A为:",A)
    print("输入字符串B为:",B)
    print("需要重复次数:",solution.repeatedStringMatch(A,B))

【例83】不下降数组 难度等级★

3.代码实现

class Solution:
    #参数nums为数组
    #返回布尔类型
    def checkPossibility(self, nums):
        count = 0
        for i in range(1, len(nums)):
            if nums[i] < nums[i - 1]:
                count += 1
                if i >= 2 and nums[i] < nums[i - 2]:
                    nums[i] = nums[i - 1]
                else:
                    nums[i - 1] = nums[i]
        return count <= 1
if __name__ == '__main__':
    solution=Solution()
    nums=[4,2,3]
    print("输入为:",nums)
    print("输出为:",solution.checkPossibility(nums))

【例84】最大的回文乘积 难度等级★

3.代码实现

class Solution:
    #参数n为整数
    #返回整数
    def largestPalindrome(self, n):
        if n==1:
            return 9
        elif n ==7:
            return 877
        elif n== 8:
            return 475
        maxNum,minNum = 10**n - 1, 10**(n-1)
        for i in range(maxNum, minNum, -1):
            candidate  = str(i)
            candidate  = candidate  + candidate [::-1]
            candidate  = int(candidate)
            j = maxNum
            while j*j > candidate :
                if candidate  % j == 0:
                    return candidate  % 1337
                j -= 1
#主函数
if __name__ == '__main__':
    s = Solution()
    n = 2
    print("输入为:",n)
    print("输出为:",s.largestPalindrome(n))

【例85】补数 难度等级★

3.代码实现

class Solution:
    #参数num为整数
    #返回整数
    def findComplement(self, num):
        return num ^ ((1<<num.bit_length())-1)
#主函数
if __name__ == '__main__':
    s = Solution()
    n = 5
    print("输入为:",n)
    print("输出为:",s.findComplement(n))

【例86】加热器 难度等级★

3.代码实现

class Solution:
    #参数houses为数组
    #参数heaters为整数
    #返回整数
    def findRadius(self, houses, heaters):
        heaters.sort()
        ans = 0
        for house in houses:
            ans=max(ans,self.closestHeater(house,heaters))
        return ans
    def closestHeater(self,house,heaters):
        start = 0
        end = len(heaters) - 1
        while start + 1 < end:
            m = start + (end - start) // 2
            if heaters[m] == house:
                return 0
            elif heaters[m] < house:
                start = m
            else:
                end = m
        return min(abs(house - heaters[start]), abs(heaters[end] - house))
#主函数
if __name__ == '__main__':
    s = Solution()
    n = [1,2,3]
    m = [2]
    print("输入房间位置为:",n)
    print("输入加热器位置:",m)
    print("输出加热半径为:",s.findRadius(n,m))

【例87】将火柴摆放成正方形 难度等级★

3.代码实现

class Solution:
    #参数nums为数组
    #返回布尔类型
    def makesquare(self, nums):
        def dfs(nums, pos, target):
            if pos == len(nums): 
                return True
            for i in range(4):
                if target[i] >= nums[pos]:
                    target[i] -= nums[pos]
                    if dfs(nums, pos+1, target):
                        return True
                    target[i] += nums[pos]
            return False
        if len(nums) < 4 :
            return False
        numSum = sum(nums)
        nums.sort(reverse = True)
        if numSum % 4 != 0: 
            return False
        target = [numSum / 4] * 4;
        return dfs(nums, 0, target)
#主函数
if __name__ == '__main__':
    s = Solution()
    n = [1,1,2,2,2]
    print("输入为:",n)
    print("输出为:",s.makesquare(n))

【例88】可怜的猪 难度等级★

3.代码实现

class Solution:
    #参数buckets为整数
    #参数minutesToDie为整数
    #参数minutesToTest为整数
    返回整数
    def poorPigs(self, buckets, minutesToDie, minutesToTest):
        pigs = 0
        while (minutesToTest / minutesToDie + 1) ** pigs < buckets:
            pigs += 1
        return pigs
#主函数
if __name__ == '__main__':
   s = Solution()
   n = 1000
   m = 15
   p = 60
   print("输入总桶数为:",n)
   print("输入中毒时间:",m)
   print("输入测试时间:",p)
   print("输出为:",s.poorPigs(n,m,p))

【例89】循环数组中的环 难度等级★

3.代码实现

class Solution:
    #参数nums为数组
    #返回布尔类型
    def get_index(self, i, nums):
        n = (i + nums[i]) % len(nums)
        return n if n >= 0 else n + len(nums)
    def circularArrayLoop(self, nums):
        for i in range(len(nums)):
            if nums[i] == 0:
                continue
            j, k = i, self.get_index(i, nums)
            while nums[k] * nums[i] > 0 and nums[self.get_index(k, nums)] * nums[i] > 0:
                if j == k:
                    if j == self.get_index(j, nums):
                        break
                    return True
                j = self.get_index(j, nums)
                k = self.get_index(self.get_index(k, nums), nums)
            j = i
            while nums[j] * nums[i] > 0:
                next = self.get_index(j, nums)
                nums[j] = 0
                j = next
                
        return False
#主函数
if __name__ == '__main__':
    s = Solution()
    n = [2,-1,1,2,2]
    print("输入为:",n)
    print("输出为:",s.circularArrayLoop(n))

【例90】分饼干 难度等级★

3.代码实现

class Solution(object):
    def findContentChildren(self, g, s):
        #参数g为整数列表
        #参数s为整数列表
        #返回整型
        g.sort()
        s.sort()
        i, j = 0, 0
        while i < len(g) and j < len(s):
            if g[i] <= s[j]:
                i += 1
            j += 1
        return i
#主函数
if __name__ == '__main__':
    s = Solution()
    n = [1,2,3]
    m = [1,1]
    print("输入贪吃指数为:",n)
    print("输入饼干尺寸为:",m)
    print("输出为:",s.findContentChildren(n,m))

【例91】翻转字符串中的元音字母 难度等级★

3.代码实现

class Solution:
    """
    参数s为字符串
    返回字符串
    """
    def reverseVowels(self, s):
        vowels = set(["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"])
        res = list(s)
        start, end = 0, len(res)-1
        while start <= end:
            while start <= end  and res[start] not in vowels:
                start += 1
            while start <= end and res[end] not in vowels:
                end -= 1
            if start <= end:
                res[start], res[end] = res[end], res[start]
                start += 1
                end -= 1
        return "".join(res)
#主函数
if __name__ == '__main__':
    s = Solution()
    x = "hello"
    print("输入为:",x)
    print("输出为:",s.reverseVowels(x))

【例92】翻转字符串 难度等级★

3.代码实现

class Solution:
    """
    参数s为字符串
    返回字符串
    """
    def reverseString(self, s):
        return s[::-1]
#主函数
if __name__ == '__main__':
    s = Solution()
    x = "hello"
    print("输入为:",x)
    print("输出为:",s.reverseString(x))

【例93】使数组元素相同的最少步数 难度等级★

3.代码实现

class Solution(object):
    def minMoves(self, nums):
        #参数nums为整数列表
        #返回整数
        sumNum = sum(nums)
        minNum = min(nums)
        return sumNum - minNum * len(nums)
#主函数
if __name__ == '__main__':
    s = Solution()
    n = [1,2,3]
    print("输入为:",n)
    print("输出为:",s.minMoves(n))

【例94】加油站 难度等级★

3.代码实现

#参数distance代表每个加油站的距离
#参数apply代表每个加油站的加油量
#参数original代表一开始有汽油
#参数target代表需要开的距离
#返回值是一个整数,代表至少需要加油站次数
class Solution:
    def getTimes(self, target, original, distance, apply):
        import queue
        que = queue.PriorityQueue()
        ans, pre = 0, 0
        if(target > distance[len(distance) - 1]):
            distance.append(target)
            apply.append(0)
        cap = original
        for i in range(len(distance)):
            if(distance[i] >= target):
                distance[i] = target
            d = distance[i] - pre
            while(cap < d and que.qsize() != 0):
                cap += (que.get()[1])
                ans += 1
            if (d <= cap):
                cap -= d
            else:
                ans = -1
                break
            que.put((-apply[i], apply[i]))
            pre = distance[i]
            if(pre == target):
                break
        return ans
if __name__ == '__main__':
    target = 25
    original = 10
    distance = [10,14,20,21]
    apply = [10,5,2,4]
    solution = Solution()
    print(" 每个加油站的距离为:", distance)
    print(" 每个加油站的加油量为:", apply)
    print(" 一开始有汽油:", original)
    print(" 需要开的距离为:", target)
    print(" 至少需要经过加油站:", solution.getTimes(target, original, distance, apply))

【例95】春游 难度等级★

3.代码实现

#参数a是小朋友组链
#返回值是个整数,表示至少需要多少辆车
class Solution:
    def getAnswer(self, a):
        count = [0 for i in range(0, 5)]
        for i in range(0, len(a)):
            count[a[i]] = count[a[i]] + 1
        count[1] = count[1] - count[3]
        if count[2] % 2 == 1:
            count[2] = count[2] + 1
            count[1] = count[1] - 2
        res = count[4] + count[3] + count[2] / 2
        if count[1] > 0:
            res = res + count[1] / 4
            if not count[1] % 4 == 0:
                res = res + 1
        return int(res)
if __name__ == '__main__':
    a = [1,2,3,4]
    solution = Solution()
    print(" 小朋友分组为:", a)
    print(" 至少需要:", solution.getAnswer(a), "辆车")

【例96】合法数组 难度等级★

3.代码实现

#参数a是待查数组
#返回值是一个数值,代表出现奇数次的值或者数组不合法
class Solution:
    def isValid(self, a):
        countSet = {}
        for i in a:
            if i in countSet:
                countSet[i] = countSet[i] + 1
            else:
                countSet[i] = 1
        isHas = False
        for key in countSet:
            if countSet[key] % 2 == 1:
                if isHas:
                    return -1
                else:
                    isHas = True
                    ans = key
        if isHas:
            return ans
        return -1
if __name__ == '__main__':
    a=[1,1,2,2,3,3,4,4,5,5]
    solution = Solution()
    print(" 数组为:", a)
    ans = solution.isValid(a)
    print(" 数组奇数个的值是:" if ans != -1 else " 数组不合法", ans) 

【例97】删除排序数组中的重复数字 难度等级★

3.代码实现

class Solution:
    #参数A: 整数列表
    #返回值:整数
    def removeDuplicates(self, A):
        B = []
        before = None
        countb = 0
        for number in A:
            if(before != number):
                B.append(number)
                before = number
                countb = 1
            elif countb < 2:
                B.append(number)
                countb += 1
        p = 0
        for number in B:
            A[p] = number
            p += 1
        return p
#主函数
if __name__ == '__main__':
    solution = Solution()
    A = [1,1,1,2,2,3]
    p = solution.removeDuplicates(A)
    print("输入:", A)
    print("输出:", p)

【例98】字符串的不同排列 难度等级★

3.代码实现

class Solution:
    #参数str: 一个字符串
    #返回值: 所有排列
    def stringPermutation2(self, str):
        result = []
        if str == '':
            return ['']
        s = list(str)
        s.sort()
        while True:
            result.append(''.join(s))
            s = self.nextPermutation(s)
            if s is None:
                break
        return result
    def nextPermutation(self, num):
        n = len(num)
        i = n - 1
        while i >= 1 and num[i - 1] >= num[i]:
            i -= 1
        if i == 0: return None
        j = n - 1
        while j >= 0 and num[j] <= num[i - 1]:
            j -= 1
        num[i - 1], num[j] = num[j], num[i - 1]
        num[i:] = num[i:][::-1]
        return num
#主函数
if __name__ == '__main__':
    solution = Solution()
s1 = "aabb"
    ans = solution.stringPermutation2(s1)
    print("输入:", s1)
    print("输出:", ans)

【例99】全排列 难度等级★

3.代码实现

class Solution:
    #参数nums: 一个整数列表
    #返回值: 排列后的列表
    def permute(self, nums):
        def _permute(result, temp, nums):
            if nums == []:
                result += [temp]
            else:
                for i in range(len(nums)):
                    _permute(result, temp + [nums[i]], nums[:i] + nums[i+1:])
        if nums is None:
            return []
        if nums is []:
            return [[]]
        result = []
        _permute(result, [], sorted(nums))
        return result
#主函数
if __name__ == '__main__':
    nums = [1,2,3]
    solution = Solution()
    result = solution.permute(nums)
    print("输入:", nums)
    print("输出:", result)

【例100】带重复元素的排列 难度等级★

3.代码实现

class Solution:
    #参数nums: 整数数组
    #返回值: 唯一排列的列表。
    def permuteUnique(self, nums):
        def _permute(result, temp, nums):
            if nums == []:
                result += [temp]
            else:
                for i in range(len(nums)):
                    if i > 0 and nums[i] == nums[i-1]:
                        continue
                    _permute(result, temp + [nums[i]], nums[:i] + nums[i+1:])
        if nums is None:
            return []
        if len(nums) == 0:
            return [[]]
        result = []
        _permute(result, [], sorted(nums))
        return result
#主函数
if __name__ == '__main__':
    solution = Solution()
    nums = [1,2,2]
    result = solution.permuteUnique(nums)
    print("输入:", nums)
    print("输出:", result)
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据知道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值