01. 反转一个三位整数

问题描述:反转一个只有三位数的整数。

问题实例:输入number=123,输出321;输入number=100,输出1。

代码实现:

"""
    IDE:PyCharm
    project_name:python300example
    file_name:01反转一个三位整数
    author:Runaway_pilot
    create_time:2022/4/28 18:53
"""
"""
    问题描述:反转一个只有三位数得整数
    问题实例:输入number=123,输出321;输入number=100,输出1
"""


class Solution:
    # param: number 一个3位数整数
    # return: 反转后的数字
    def function(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
    new_num = solution.function(num)
    print("输入:{}".format(num))
    print("输出:{}".format(new_num))

运行结果

输入:123
输出:321

02. 合并排序数组

问题描述:合并两个升序得整数数组A和B,形成一个新的数组,新数组也要有序。

问题实例:输入A=[1,2,3,4],B=[2,4,6,8],输出[1,2,2,3,4,4,6,8]。

代码实现

"""
    IDE:PyCharm
    project_name:python300example
    file_name:02合并排序数组
    author:Runaway_pilot
    create_time:2022/4/28 19:09
"""
"""
    问题描述:合并两个升序得整数数组A和B,形成一个新的数组,新数组也要有序
    问题实例:输入A=[1,2,3,4],B=[2,4,6,8],输出[1,2,2,3,4,4,6,8]
"""


class Solution:
    # param: A,B均为有序整数组
    # return: 合并后的有序整数组
    def function(self, A, B):
        i, j = 0, 0
        lists = []
        while i < len(A) and j < len(B):
            if A[i] < B[j]:
                lists.append(A[i])
                i += 1
            else:
                lists.append(B[j])
                j += 1
        while i < len(A):
            lists.append(A[i])
            i += 1
        while j < len(B):
            lists.append(B[j])
            j += 1
        return lists

    def built(self, A, B):
        # 运用内置函数
        A.extend(B)
        A.sort()
        return A


if __name__ == '__main__':
    # 实例化对象
    A = [1, 2, 3, 4]
    B = [2, 4, 6, 8]
    solution = Solution()
    print("输入:{} {}".format(A, B))
    print("输出:{}".format(solution.function(A, B)))
    print("使用内置函数:{}".format(solution.built(A, B)))

运行结果

输入:[1, 2, 3, 4] [2, 4, 6, 8]
输出:[1, 2, 2, 3, 4, 4, 6, 8]
使用内置函数:[1, 2, 2, 3, 4, 4, 6, 8]

03. 旋转字符串

问题描述:给定一个字符串(以字符数组的形式)和偏移量,根据偏移量从左向右旋转字符串。

问题实例:输入str = "abcdefg",offset = "3",输出"efgabcd";
                  输入str = "abcdefg",offset = "0",输出"abcdefg";
                  输入str = "abcdefg",offset = "2",输出"fgabcde";

代码实现

"""
    IDE:PyCharm
    project_name:python300example
    file_name:03旋转字符串
    author:Runaway_pilot
    create_time:2022/4/28 20:36
"""
"""
    问题描述:给定一个字符串(以字符数组的形式)和偏移量,根据偏移量从左向右旋转字符串
    问题实例:输入str = "abcdefg",offset = "3",输出"efgabcd";
            输入str = "abcdefg",offset = "0",输出"abcdefg";
            输入str = "abcdefg",offset = "2",输出"fgabcde";
"""


class Solution:
    # param: s(字符列表);offset(整数)
    # return:无
    def function(self, s, offset):
        new_s = s
        if len(new_s) > 0:
            offset = offset % len(new_s)
        temp = (new_s + new_s)[len(new_s) - offset:2 * len(new_s) - offset]
        for i in range(len(temp)):
            s[i] = temp[i]
        return new_s


if __name__ == '__main__':
    # 实例化对象
    s = ["a", "b", "c", "d", "e", "f", "g"]
    offset = 3
    solution = Solution()
    print("输入:s = {},off = {}".format(s, offset))
    print("输出:s = {}".format(solution.function(s, offset)))

运行结果

输入:s = ['a', 'b', 'c', 'd', 'e', 'f', 'g'],off = 3
输出:s = ['e', 'f', 'g', 'a', 'b', 'c', 'd']

04. 相对排名

问题描述:根据N名运动员得分,找到相对等级和获得最高分前3名的人,分别获得金牌、银牌和                      铜牌。N是正整数,,并且不过 10000。所有运动员的成绩都保证是独一无二的。

问题实例:输入[5,4,3,2,1],输出["Gold Medal","Silver Medal", "Bronze Medal","4","5"],前                    3名运动员得分较高,根据得分依次获得金牌、银牌和铜牌。对于后两名运动员,根据                    分数输出相对等级。

代码实现

"""
    IDE:PyCharm
    project_name:python300example
    file_name:04相对排名
    author:Runaway_pilot
    create_time:2022/4/28 22:15
"""
"""
    问题描述:根据N名运动员得分,找到相对等级和获得最高分前3名的人,分别获得金牌、银牌和铜牌。N是正整数,
            并且不过 10000。所有运动员的成绩都保证是独一无二的。
    问题实例:输入[5,4,3,2,1],输出["Gold Medal","Silver Medal", "Bronze Medal","4","5"],
            前3名运动员得分较高,根据得分依次获得金牌、银牌和铜牌。对于后两名运动员,根据分数输出相对等级。
"""


class Solution:
    # param: nums(整数列表)
    # return: 列表
    def function(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"
            elif i == 1:
                res = "Silver Medal"
            elif i == 2:
                res = "Bronze Medal"
            answer[score[sortedScore[i]]] = res
        return answer


if __name__ == '__main__':
    # 实例化对象
    solution = Solution()
    num = [4, 5, 2, 3, 1]
    print("输入:{}".format(num))
    print("输出:{}".format(solution.function(num)))

运行结果

输入:[4, 5, 2, 3, 1]
输出:['Silver Medal', 'Gold Medal', '4', 'Bronze Medal', '5']

05. 二分法查找

问题描述:给定一个排序的整数数组(升序)和一个要查找的目标整数target,查找到 target第1次出                    现的下标(从0开始),如果target不存在于数组中,返回-1。

问题实例:输入数组[1,4,4,5,7,7,8,9,9,10]和目标整数1,输出其所在的位置为0,即第1次出现在第                    0个位置。输入数组[1,2,3,3,4,5,10]和目标整数3,输出2,即第1次出现在第2                    个位置。输入数组[1,2,3,3,4,5,10]和目标整数6,输出-1,即没有出现过6,返                      回-1。

代码实现

"""
    IDE:PyCharm
    project_name:python300example
    file_name:05二分法查找
    author:Runaway_pilot
    create_time:2022/5/5 15:01
"""
"""
    问题描述:给定一个排序的整数数组(升序)和一个要查找的目标整数target,查找到
            target第1次出现的下标(从0开始),如果target不存在于数组中,返回-1。
    问题实例:输入数组[1,4,4,5,7,7,8,9,9,10]和目标整数1,输出其所在的位置为0,
            即第1次出现在第0个位置。输入数组[1,2,3,3,4,5,10]和目标整数3,
            输出2,即第1次出现在第2个位置。输入数组[1,2,3,3,4,5,10]和目
            标整数6,输出-1,即没有出现过6,返回-1。
"""


class Solution:
    # param nums :整数数组
    # param target :要查找的目标数字
    # return :目标数字第一个出现的位置,从0开始
    def binarySearch(self, nums, target:int):
        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)
        elif nums[mid] == target:
            return mid
        elif nums[mid] < target:
            return self.search(nums, mid, end, target)


if __name__ == '__main__':
    # 实例化对象
    nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    target = 5
    solution = Solution()
    print("输入:nums = {};target = {}".format(nums, target))
    print("输出:{}".format(solution.binarySearch(nums=nums,target=target)))

运行结果

输入:nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];target = 5
输出:4

摘抄自《Python编程300例》,作者李永华

Everything is going smoothly.

更多推荐

【Python编程300例】入门100例(01-05)