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