python每期一练0915

002.给定一个数字,请编写一个函数,求出绝对值最小的组合。备注:组合时0不可排在前面


题目来源:codcwars

# @-*- coding: utf-8 -*-
# @Author: 师玉幺叔
# @Software: Pycharm

"""
    给定一个数字,请编写一个函数,求出绝对值最小的组合。
    备注:组合时0不可排在前面
"""


# 方式一:将数字转换成字符串,然后利用列表进行排序
def min_permutation01(num):
    """
        将整数降序排序,且组合时0排在最后面
    :param num: 需要排序的整数
    :return: 排序后的整数
    """
    # 方式一:将数字转换成字符串,然后利用列表进行排序
def min_permutation01(num):
    """
        将整数降序排序,且组合时0排在最后面
    :param num: 需要排序的整数
    :return: 排序后的整数
    """
    if num > 0:
        # 将数字转换成列表
        list_num = [item for item in str(num)]
        sort_list(list_num)
        # 将列表拼接成字符串
        num = int(''.join(list_num))
        return num
    elif num < 0:
        # 如果num小于0,则先转换成绝对值,再转换成列表
        list_num = [digit for digit in str(abs(num))]
        sort_list(list_num)
        # 将列表拼接成字符串
        num = -int(''.join(list_num))
        return num
    else:
        # return str(num)
        return num


# 方式二:先将数字转换为字符串,然后将每个字符数字以字符串的形式映射回来
def min_permutation02(num):
    """
        将整数降序排序,且组合时0排在最后面
    :param num: 需要排序的整数
    :return: 排序后的整数
    """
    if num > 0:
        list_num = list(map(str, str(num)))
        sort_list(list_num)
        num = ''.join(list_num)
        return num
    elif num < 0:
        list_num = list(map(str, str(abs(num))))
        sort_list(list_num)
        num = ''.join(list_num)
        return -int(num)
    else:
        # return str(num)
        return num


def sort_list(target):
    """
        将列表进行降序排序
    :param target: 需要排序的列表
    :return: 排序后的列表
    """
    # 判断列表元素中是否存在0,如果存在则统计出现的次数,并且在删除之后,重新追加列表的末尾
    # if '0' in target:
    #     count = target.count('0')
    #     for i in range(count):
    #         target.remove('0')
    #     for i in range(count):
    #         target.append('0')
    target.sort(reverse=True)
    # 循环遍历列表进行排序
    for i in range(1, len(target)):
        for j in range(len(target) - i):
            if int(target[j]) > int(target[j + 1]) and int(target[j + 1]) != 0:
                target[j], target[j + 1] = target[j + 1], target[j]
    return target


if __name__ == '__main__':
    # assert min_permutation(312)  # 123
    # assert min_permutation(29394)  # 23499
    # assert min_permutation(-20)  # -20
    # assert min_permutation(0)  # 0

    # print(min_permutation01(312))
    # print(min_permutation01(29394))
    # print(min_permutation01(-20))
    # print(min_permutation01(0))
    # print('-------------我是分割线-------------')
    # print(min_permutation02(312))
    # print(min_permutation02(29394))
    # print(min_permutation02(-20))
    print(min_permutation02(0))  # 0

    print(min_permutation02(-2020045560980))  # -2245568900000
    print(min_permutation02(2020045560980))  # 2245568900000
    print(min_permutation02(-20))  # -20
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值