《剑指offer》把数组排成最小的数

本题来自《剑指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型
posted @ 2019-04-28 14:09  weilongyitian  阅读(146)  评论(0编辑  收藏  举报