本题来自《剑指offer》 把数组排成最小的数
题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
看《剑指offer》p117。
C++ Code:
Python Code:
# -*- coding:utf-8 -*- class Solution: def PrintMinNumber(self, numbers): # write code here if len(numbers) == 0: #边界判断 return '' len_numbers = len(numbers) #数组的长度 number = '' #目标结果缓存值 for i in range(len(numbers)): #遍历数组中的全部值 for j in range(len_numbers-1): #下标 num1 = str(numbers[j]) #取第一个值,都是字符串 num2 = str(numbers[j+1]) #取第二个值 num3 = num1 + num2 #两者相加 num4 = num2 + num1 if int(num3) > int(num4): #如果大于就交换 temp = numbers[j] numbers[j] = numbers[j+1] numbers[j+1] = temp len_numbers -= 1 if numbers == 1: #如果只有一个值,便退出此循环 break for num in numbers: number = number + str(num) #字符串的累加 return int(number) #转换成int型