搜索微信公衆號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多算法、機器學習乾貨python
csdn:https://blog.csdn.net/baidu_31657889/git
github:https://github.com/aimi-cn/AILearnersgithub
這個系列是我在牛客網上刷《劍指Offer》的刷題筆記,旨在提高下本身的算法能力。
查看完整的劍指Offer算法題解析請點擊CSDN和github連接:
劍指Offer完整習題解析CSDN地址
github地址算法
輸入一個正整數數組,把數組裏全部數字拼接起來排成一個數,打印能拼接出的全部數字中最小的一個。例如輸入數組{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」系列資訊類文章,歡迎您的關注!