如何创建最小的剩余零数?

时间:2018-10-05 17:22:32

标签: python

我被赋予从剩下的两个数字中创建最小数字的任务。 但是我无法解决该任务,因为我的代码没有适当保留所有零。如果输入是

245
36

输出为23456,这是正确的。但是输入:

40
305

它输出:[0,0,3,4,5]。但应为30045

这是我的代码:

f1 = [int(x) for x in input()]
f2 = [int(y) for y in input()]
f = f1+f2
for each in range(len(f)):
    for eacc in range(each+1, len(f)):
        if f[each] > f[eacc]:
            f[each], f[eacc] = f[eacc], f[each]
for zero in range(len(f)):
    if f[zero] == 0 and f[0] > 0:
        f.remove(0)
        f.insert(zero+1, 0)
        break
print(f)

3 个答案:

答案 0 :(得分:0)

n1 = 40
n2 = 305

# sort lexicograhically
ns = sorted(str(n1) + str(n2))

# move the first non-zero element to the start
i = ns.count('0')
if 0 < i < len(ns):
    ns[0:0] = ns.pop(i)

答案 1 :(得分:0)

删除所有零。获取所有permutations并找到最小值。然后从索引1添加零

from itertools import permutations
a=list('40')+list('305')
a=list(map(int,a))
num_of_zero=a.count(0) # get the count of zeros
for i in range(num_of_zero):
    a.pop(a.index(0))
new_list=list(min(list(permutations(a)))) # get all the permutations
for i in range(num_of_zero):
    new_list.insert(1,0) # insert zeros at index 1 shifting all element to the right

print(''.join(map(str,new_list)))#30045

没有排列的sorted也可以使用

a=list('40')+list('305')
a=list(map(int,a))
num_of_zero=a.count(0)
for i in range(num_of_zero):
    a.pop(a.index(0))
new_list=sorted(a)
for i in range(num_of_zero):
    new_list.insert(1,0)
print(''.join(map(str,new_list)))#30045

使用numpy

import numpy as np
a=list('40')+list('305')
a=list(map(int,a))
num_of_zero=a.count(0)

new_list=sorted(a) # sorted will return [0,0,3,4,5] 

I = np.nonzero(new_list) #return non_zero_array
if(len(I[0])>0):
    first_non_zero_value=new_list.pop(I[0][0]) #get index of first element
    new_list.insert(0,first_non_zero_value)
print(''.join(map(str,new_list)))#30045

答案 2 :(得分:0)

在这里您可以使用 itertools.permutations 。首先,我将使用mapints更改为lists。接下来,我将它们连接起来,并在list中有一个5 ints。然后使用排列,我们可以根据这些5 ints生成所有可能的数字。现在,从我们的新列表中,我们可以使用* list理解来使用min,并使用0过滤掉以if i[0]开头的所有项目。由于它是一个元组,因此我们必须将元素转换为str,然后可以join将它们转换为intprint

from itertools import permutations

a = 40
b = 305

a = [*map(int, str(a))]
b = [*map(int, str(b))]

c = a + b

combo = list(permutations(c, len(c)))

res = min([i for i in combo if i[0]])
res = [str(i) for i in res]

print(''.join(res))
# 30045

如果a = 0, b = 0是一个可能的输入,则try/except块将是必需的

try:
    res = min([i for i in combo if i[0]])
    res = [str(i) for i in res]
    print(int(''.join(res)))
except ValueError:
    res = 0
    print(res)