劍指Offer(三十二):把數組排成最小的數

劍指Offer(三十二):把數組排成最小的數

搜索微信公衆號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多算法、機器學習乾貨python

csdn:https://blog.csdn.net/baidu_31657889/git

github:https://github.com/aimi-cn/AILearnersgithub

1、引子

這個系列是我在牛客網上刷《劍指Offer》的刷題筆記,旨在提高下本身的算法能力。
查看完整的劍指Offer算法題解析請點擊CSDN和github連接:
劍指Offer完整習題解析CSDN地址
github地址算法

2、題目

輸入一個正整數數組,把數組裏全部數字拼接起來排成一個數,打印能拼接出的全部數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。編程

一、思路

遇到這個題,全排列固然能夠作,可是時間複雜度爲O(n!)。在這裏咱們本身定義一個規則,對拼接後的字符串進行比較。數組

排序規則以下:微信

若ab > ba 則 a 大於 b, 例子:a=3 b=32 ab=332 ba=323 因此a大於b 下面的規則和這個比較方法一致若ab < ba 則 a 小於 b,若ab = ba 則 a 等於 b;機器學習

根據上述規則,咱們須要先將數字轉換成字符串再進行比較,由於須要串起來進行比較。比較完以後,按順序輸出便可。學習

二、編程實現

pythonspa

代碼實現方案:

# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        if numbers is None:
            return ""
        lens = len(numbers)
        if lens ==0 :
            return ""
        tmpNumbers = sorted(numbers,cmp=self.compare)
        return int(''.join(str(x)for x in tmpNumbers))
    def compare(self,num1,num2):
        t = str(num1)+str(num2)
        s = str(num2)+str(num1)
        if t>s:
            return 1
        elif t<s:
            return -1
        else:
            return 0複製代碼

AIMI-CN AI學習交流羣【1015286623】 獲取更多AI資料

分享技術,樂享生活:咱們的公衆號計算機視覺這件小事每週推送「AI」系列資訊類文章,歡迎您的關注!

相關文章
相關標籤/搜索