'''
输入一组非负数, 输出这些数的拼接,保证该拼接后的数最大
input 20,203
output 20320
'''
import sys
def split_number(number):
'''
:param number: 123
:return: [1, 2, 3]
'''
length = len(str(number))
i = length-1
str_num = [0 for i in range(length)]
n = number
while n > 0:
temp = n % 10
str_num[i] = temp
i -= 1
n = (n-temp) // 10
return str_num
def who_is_first(num1, num2):
num1_char = split_number(num1) #
num2_char = split_number(num2)
flag = True
length_num1 = len(num1_char) # 第一个数的位数
length_num2 = len(num2_char) # 第二个数的位数
i = 0
j = 0
while i < length_num1 and j < length_num2 :
if num1_char[i] < num2_char[j]:
flag = False
return flag
elif num1_char[i] == num2_char[j] and length_num1 != length_num2:
if i == len(num1_char)-1: # 第一个数比较短,再看第二个数的第(length_num1+1)个数是否比第一个数的第一位大
if num2_char[(length_num1+1)-1] > num1_char[0]:
flag = False
else:
flag = True
return flag
elif j == len(num2_char)-1: # 第二个数比较短
if num1_char[(length_num2+1)-1] > num2_char[0]: # 第二个数比较短,再看第一个数的第(length_num2+1)个数是否比第二个数的第一位大
flag = True
else:
flag = False
return flag
else:
flag = True
return flag
i += 1
j += 1
return flag
def my_sort(numbers):
'''
指定规则排序 选择排序法
:param numbers:
:return:
'''
for i in range(0, len(numbers)-1):
the_first = i
for j in range(i+1, len(numbers)):
if who_is_first(numbers[j], numbers[the_first]):
the_first = j
temp = numbers[i]
numbers[i] = numbers[the_first]
numbers[the_first] = temp
return numbers
numbers = list(map(int, input().split(',')))
for num in my_sort(numbers):
sys.stdout.write(str(num))
bilibili-2020算法笔试第一题-输出数组拼接最大数
最新推荐文章于 2022-06-13 10:32:29 发布