剑指 Offer 面试题45:把数组排成最小的数——Python内置函数 map()、__lt__()、join()、sorted()
題目描述
- 輸入一個(gè)正整數(shù)數(shù)組,把數(shù)組里所有數(shù)字拼接起來(lái)排成一個(gè)數(shù),打印能拼接出的所有數(shù)字中最小的一個(gè)。
- 輸出結(jié)果可能非常大,所以需要返回一個(gè)字符串而不是整數(shù)。
- 拼接起來(lái)的數(shù)字可能會(huì)有前導(dǎo) 0,最后結(jié)果不需要去掉前導(dǎo) 0。
示例1:
輸入: [10,2] 輸出: "102"示例2:
輸入: [3,30,34,5,9] 輸出: "3033459"解題代碼:
class Compare(str): # 重寫(xiě)比較規(guī)則,按照新的比較規(guī)則實(shí)現(xiàn)升序排列,類(lèi)似于C++中函數(shù)重載def __lt__(self, y): # 重寫(xiě)內(nèi)置函數(shù) __lt__() 用于比較return self+y < y+self # 條件成立,則 self 在結(jié)果中一定位于 y 前面class Solution:def minNumber(self, nums: List[int]) -> str:nums_l = sorted(map(str, nums), key=Compare) # 通過(guò)參數(shù) key 傳入比較函數(shù)return ''.join(nums_l) # 將排序結(jié)果列表 nums_l 連接成結(jié)果字符串題目中用到的 Python 內(nèi)置函數(shù)解析
內(nèi)置函數(shù)__lt__():
__lt__(self, other) # 5個(gè)福比較函數(shù)之一,含義如下:gt(self, other) # 判斷 self 對(duì)象是否大于 other 對(duì)象; lt(self, other) # 判斷 self 對(duì)象是否小于 other 對(duì)象; ge(slef, other) # 判斷 self 對(duì)象是否大于或者等于 other 對(duì)象; le(self, other) # 判斷 self 對(duì)象是否小于或者等于 other 對(duì)象; eq(self, other) # 判斷 self 對(duì)象是否等于 other 對(duì)象; ne(self, other) # 判斷 self 對(duì)象是否不等于 other 對(duì)象;這些函數(shù)用于替代已經(jīng)被取消的cmp()函數(shù),以上這些方法,object類(lèi)實(shí)現(xiàn)了__eq__和__ne__兩個(gè)方法。__lt__、__le__、__gt__、__ge__這些方法默認(rèn)返回值為 “NotImplemented”,需要自定義類(lèi)實(shí)現(xiàn)這些方法才能正確使用這些方法,當(dāng)然__eq__和__ne__這兩個(gè)方法也可以重寫(xiě)。
內(nèi)置函數(shù)map():
map(function, iterable) # 以參數(shù)序列 iterable 中的每一個(gè)元素調(diào)用 function 函數(shù),返回包含每次 function 函數(shù)返回值的新列表。內(nèi)置函數(shù)join():
用于將序列中的元素以指定的字符連接生成一個(gè)新的字符串,如下:
內(nèi)置函數(shù)sorted():
函數(shù)原型:sorted(iterable[, key][, reverse]),從 iterable 中的項(xiàng)目返回新的排序列表,原迭代器中值不變。
有兩個(gè)可選參數(shù) key 和 reverse,必須指定為關(guān)鍵字參數(shù)。key 指定一個(gè)用于比較的函數(shù),用于從迭代器中提取比較鍵進(jìn)行比較,如:key=str.lower。默認(rèn)值為 None (直接比較元素)。
reverse 是一個(gè)布爾值。如果設(shè)置為 True,那么列表元素將按照每個(gè)比較反轉(zhuǎn)進(jìn)行排序。
參考博客:
https://blog.csdn.net/m0_38109046/article/details/86636511
https://blog.csdn.net/weixin_30932215/article/details/96449764
總結(jié)
以上是生活随笔為你收集整理的剑指 Offer 面试题45:把数组排成最小的数——Python内置函数 map()、__lt__()、join()、sorted()的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python中的堆实现:heapq 模块
- 下一篇: websocket python爬虫_p