多個數排列形成最大值

2021-07-09 18:02:08 字數 1816 閱讀 5544

標籤(空格分隔): 程式設計題

已知有一些數(大小不限定,不一定為個位數),如何將這些數排列在一起構成的數值最大?

針對這個題目,最簡單的辦法就是通過全排列來查詢最大值,不過我們可以看到依次選擇最大的字面數來從左到右構成數即可保證最大值(因為所有能夠形成的數的位數都是一樣的,從左到右依次比較肯定能夠滿足最大),由於在從左到右依次選擇時可能出現多條路徑,因此需要考慮多種可能。

def

get_max_num

(numbers):

""" 對一些數字尋找最大排列

"""str_numbers =[str(i) for i in numbers]

digit_num = sum(len(i) for i in str_numbers)

seqs = [numchooseseq('', '', str_numbers)]

#每次選擇新增乙個數字,因此需要執行數字位數次數

for _ in range(digit_num):

new_seqs =

for seq in seqs:

new_seqs += list(seq.choose_next())

#比較小的結果去掉

max_num = max(i.curr_num for i in new_seqs)

new_seqs = [i for i in new_seqs if i.curr_num == max_num]

seqs = new_seqs

return int(seqs[0].curr_num)

class

numchooseseq

():"""

輔助類,用以記錄各種不同的排列

"""def__init__

(self, curr_num, follow, unused):

self.curr_num = curr_num

self.unused = unused

self.follow = follow #用以記錄多位數選取了部分,剩餘的部分

defchoose_next

(self):

if self.follow:

yield numchooseseq(self.curr_num+self.follow[0], self.follow[1:], self.unused)

else:

max_num = max(i[0] for i in self.unused)

for index,num_ in enumerate(self.unused):

if num_[0] == max_num:

rest = self.unused[:index] + self.unused[index+1:]

yield numchooseseq(self.curr_num+num_[0], num_[1:], rest)

defshow

(self):

print('curr', self.curr_num, 'follow',self.follow, 'unused', self.unused)

deftest

():assert(get_max_num([1,2,3]) == 321)

assert(get_max_num([1,10,1]) == 1110)

assert(get_max_num([958,9,5,6]) == 995865)

assert(get_max_num([30,31,3,2]) == 331302)

if __name__ == '__main__':

test()

最大值 python找出幾個數最大值的方法

python找出幾個數中最大值的方法 1 簡單的使用if else進行判斷 list 12,34,2,0,1 max list 0 定義變數max用來儲存最大值,初始值賦值為列表中任意乙個值 for i in list if i max max i print 這個列表中最大值為 max 2 使用m...

Java 獲取輸入多個數值的最大值最小值平均值

本方法不使用排序 陣列,獲取輸入數中最大最小平均值 具體思想 使用四個變數分別儲存最大值max 最小值min 輸入數的總值sum 和控制輸入數量的count 每獲取到乙個輸入數值,就進行一遍比較,如果輸入數大於輸入的數大於max的值,就把輸入值賦值給max,輸入的數小於的值,就把輸入值賦值給min,...

求兩個數的最大值及最大值方法的過載

建立方法求兩個數的最大值max2,隨後再寫乙個求3個數的最大值的函式max3。要求 在max3這個函式中,呼叫max2函式,來實現3個數的最大值計算 public class test private static intmax3 int a,int b,int c private static i...