问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Python实现,输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接

发布网友 发布时间:2022-04-25 07:12

我来回答

4个回答

热心网友 时间:2023-11-06 01:41

你的例子第一列全是 3,我给个例子吧:[321, 32, 3, 4],输出该是 321,32,3,4。

第一个数越大,则应该排在后面,毕竟 4XXX 是比 3XXX 大的。

setp 1: [0][1][2]
         3  2  1
         3  2
         3
         4
排序第 0 列,越大的排越后。
ret = [?, ?, ?, 4]

setp 2: [0][1][2]
         3  2  1
         3  2
         3 <3>     <- 补位 3,因为 3 是同 3 组第一个元素。
排序第 1 列,越大的排越后。
ret = [?, ?, 3, 4]

setp 3: [0][1][2]
         3  2  1
         3  2 <3>  <- 补位 3,因为 3 是同 3 组第一个元素。
排序第 2 列,越大的排越后。323 比 321 大,所以……
ret = [?, 32, 3, 4]

只剩一个,那个排第一:
ret = [321, 32, 3, 4]

以上就是基本思路了。综上可得:

1. 先按 [0] 列分组:

2. 组中每个数都补位到同样长度,然后再排序。

完整代码:

def joinmin(ls):
    groups = {}
    for item in ls:
        prefix = item
        n = 0
        while prefix > 10:
            prefix //= 10
            n += 1
        groups.setdefault(prefix, []).append([item, n])
    sorted_keys = list(sorted(groups))
    ret = 0
    for prefix in sorted_keys:
        items = groups[prefix]
        max_n = max([t[1] for t in items])
        presort_items = []
        for item, item_n in items:
            padding = item
            n = item_n
            while max_n > n:
                padding *= 10
                padding += prefix
                n += 1
            presort_items.append((padding, item, item_n))
        for _, item, n in sorted(presort_items):
            while n > -1:
                ret *= 10
                n -= 1
            ret += item
    return ret

不是看在你的分上答的,不过这种小题目蛮有趣的。

热心网友 时间:2023-11-06 01:41

你的例子第一列全是 3,我给个例子吧:[321, 32, 3, 4],输出该是 321,32,3,4。

第一个数越大,则应该排在后面,毕竟 4XXX 是比 3XXX 大的。

setp 1: [0][1][2]
         3  2  1
         3  2
         3
         4
排序第 0 列,越大的排越后。
ret = [?, ?, ?, 4]

setp 2: [0][1][2]
         3  2  1
         3  2
         3 <3>     <- 补位 3,因为 3 是同 3 组第一个元素。
排序第 1 列,越大的排越后。
ret = [?, ?, 3, 4]

setp 3: [0][1][2]
         3  2  1
         3  2 <3>  <- 补位 3,因为 3 是同 3 组第一个元素。
排序第 2 列,越大的排越后。323 比 321 大,所以……
ret = [?, 32, 3, 4]

只剩一个,那个排第一:
ret = [321, 32, 3, 4]

以上就是基本思路了。综上可得:

1. 先按 [0] 列分组:

2. 组中每个数都补位到同样长度,然后再排序。

完整代码:

def joinmin(ls):
    groups = {}
    for item in ls:
        prefix = item
        n = 0
        while prefix > 10:
            prefix //= 10
            n += 1
        groups.setdefault(prefix, []).append([item, n])
    sorted_keys = list(sorted(groups))
    ret = 0
    for prefix in sorted_keys:
        items = groups[prefix]
        max_n = max([t[1] for t in items])
        presort_items = []
        for item, item_n in items:
            padding = item
            n = item_n
            while max_n > n:
                padding *= 10
                padding += prefix
                n += 1
            presort_items.append((padding, item, item_n))
        for _, item, n in sorted(presort_items):
            while n > -1:
                ret *= 10
                n -= 1
            ret += item
    return ret

不是看在你的分上答的,不过这种小题目蛮有趣的。

热心网友 时间:2023-11-06 01:41

import itertools

data = {3, 32, 321, 3432, 435, 64, 324}     # 最小组合数结果 321323243343243564
# data = {3, 32, 321}     # 最小组合数结果    321323

# 1、首先 data 是一个 set 集合,需要将其转换为 列表进行排序    sorted(list(data)))
# 2、然后通过python的内置库 itertools.permutations   进行排列组合
x = list(itertools.permutations(sorted(list(data))))

# 3、将排列组合出来的数先转为字符串
# 4、然后通过 join 将其组合成一个字符串
# 5、将组合出的数字字符串加入新的 set 集合中
new_data = set()
for i in x:
    n_str = "".join([str(n) for n in i])
    new_data.add(n_str)

# 6、将新的 set 集合转换成列表进行排序,取第一个就是最小的
min_n = sorted(list(new_data))[0]
print(min_n)    # 7、输出最小排列组合的值

热心网友 时间:2023-11-06 01:42

用int会越界的,所以先转成str

数字拼接满足结合律,所以只需要保证每两个数拼接后更小就行了,即ij?ji。因此,可以使用冒泡排序,但是比较的条件变成'i'+'j' > 'j' + 'i',如果满足就交换。

输出用print(''.join(list))即可,python打印字符串的时候不会带''的。

代码是:

# -*- coding:utf-8 -*-

class Solution:

def PrintMinNumber(self,numbers):

if not numbers:

return ''

n = len(numbers)

for i in range(n):

numbers[i] = str(numbers[i])

print(numbers)

for i in range(n):

for j in range(i+1,n):

if numbers[i] + numbers[j] > numbers[j] + numbers[i]:

numbers[i],numbers[j] = numbers[j],numbers[i]

return ''.join(numbers)

热心网友 时间:2023-11-06 01:42

python中的数组,即使是*数组,貌似都是用的中括号表示吧? 花括号貌似都是针对字典的。

个人以为,可以先将原先的数组转换成列表,利用列表的内置方法排序并拼接后,再转换回去原来的格式。

原始数据,我不知道是什么格式。只是我以为,按照你的说法,跑不出元组、列表、字典等几种格式。这几种格式的转换相对还是比较简单的。

代码就不写了。个人以为这样的做法,应该比较合适。

热心网友 时间:2023-11-06 01:41

import itertools

data = {3, 32, 321, 3432, 435, 64, 324}     # 最小组合数结果 321323243343243564
# data = {3, 32, 321}     # 最小组合数结果    321323

# 1、首先 data 是一个 set 集合,需要将其转换为 列表进行排序    sorted(list(data)))
# 2、然后通过python的内置库 itertools.permutations   进行排列组合
x = list(itertools.permutations(sorted(list(data))))

# 3、将排列组合出来的数先转为字符串
# 4、然后通过 join 将其组合成一个字符串
# 5、将组合出的数字字符串加入新的 set 集合中
new_data = set()
for i in x:
    n_str = "".join([str(n) for n in i])
    new_data.add(n_str)

# 6、将新的 set 集合转换成列表进行排序,取第一个就是最小的
min_n = sorted(list(new_data))[0]
print(min_n)    # 7、输出最小排列组合的值

热心网友 时间:2023-11-06 01:42

用int会越界的,所以先转成str

数字拼接满足结合律,所以只需要保证每两个数拼接后更小就行了,即ij?ji。因此,可以使用冒泡排序,但是比较的条件变成'i'+'j' > 'j' + 'i',如果满足就交换。

输出用print(''.join(list))即可,python打印字符串的时候不会带''的。

代码是:

# -*- coding:utf-8 -*-

class Solution:

def PrintMinNumber(self,numbers):

if not numbers:

return ''

n = len(numbers)

for i in range(n):

numbers[i] = str(numbers[i])

print(numbers)

for i in range(n):

for j in range(i+1,n):

if numbers[i] + numbers[j] > numbers[j] + numbers[i]:

numbers[i],numbers[j] = numbers[j],numbers[i]

return ''.join(numbers)

热心网友 时间:2023-11-06 01:42

python中的数组,即使是*数组,貌似都是用的中括号表示吧? 花括号貌似都是针对字典的。

个人以为,可以先将原先的数组转换成列表,利用列表的内置方法排序并拼接后,再转换回去原来的格式。

原始数据,我不知道是什么格式。只是我以为,按照你的说法,跑不出元组、列表、字典等几种格式。这几种格式的转换相对还是比较简单的。

代码就不写了。个人以为这样的做法,应该比较合适。

热心网友 时间:2023-11-06 01:41

你的例子第一列全是 3,我给个例子吧:[321, 32, 3, 4],输出该是 321,32,3,4。

第一个数越大,则应该排在后面,毕竟 4XXX 是比 3XXX 大的。

setp 1: [0][1][2]
         3  2  1
         3  2
         3
         4
排序第 0 列,越大的排越后。
ret = [?, ?, ?, 4]

setp 2: [0][1][2]
         3  2  1
         3  2
         3 <3>     <- 补位 3,因为 3 是同 3 组第一个元素。
排序第 1 列,越大的排越后。
ret = [?, ?, 3, 4]

setp 3: [0][1][2]
         3  2  1
         3  2 <3>  <- 补位 3,因为 3 是同 3 组第一个元素。
排序第 2 列,越大的排越后。323 比 321 大,所以……
ret = [?, 32, 3, 4]

只剩一个,那个排第一:
ret = [321, 32, 3, 4]

以上就是基本思路了。综上可得:

1. 先按 [0] 列分组:

2. 组中每个数都补位到同样长度,然后再排序。

完整代码:

def joinmin(ls):
    groups = {}
    for item in ls:
        prefix = item
        n = 0
        while prefix > 10:
            prefix //= 10
            n += 1
        groups.setdefault(prefix, []).append([item, n])
    sorted_keys = list(sorted(groups))
    ret = 0
    for prefix in sorted_keys:
        items = groups[prefix]
        max_n = max([t[1] for t in items])
        presort_items = []
        for item, item_n in items:
            padding = item
            n = item_n
            while max_n > n:
                padding *= 10
                padding += prefix
                n += 1
            presort_items.append((padding, item, item_n))
        for _, item, n in sorted(presort_items):
            while n > -1:
                ret *= 10
                n -= 1
            ret += item
    return ret

不是看在你的分上答的,不过这种小题目蛮有趣的。

热心网友 时间:2023-11-06 01:41

import itertools

data = {3, 32, 321, 3432, 435, 64, 324}     # 最小组合数结果 321323243343243564
# data = {3, 32, 321}     # 最小组合数结果    321323

# 1、首先 data 是一个 set 集合,需要将其转换为 列表进行排序    sorted(list(data)))
# 2、然后通过python的内置库 itertools.permutations   进行排列组合
x = list(itertools.permutations(sorted(list(data))))

# 3、将排列组合出来的数先转为字符串
# 4、然后通过 join 将其组合成一个字符串
# 5、将组合出的数字字符串加入新的 set 集合中
new_data = set()
for i in x:
    n_str = "".join([str(n) for n in i])
    new_data.add(n_str)

# 6、将新的 set 集合转换成列表进行排序,取第一个就是最小的
min_n = sorted(list(new_data))[0]
print(min_n)    # 7、输出最小排列组合的值

热心网友 时间:2023-11-06 01:42

用int会越界的,所以先转成str

数字拼接满足结合律,所以只需要保证每两个数拼接后更小就行了,即ij?ji。因此,可以使用冒泡排序,但是比较的条件变成'i'+'j' > 'j' + 'i',如果满足就交换。

输出用print(''.join(list))即可,python打印字符串的时候不会带''的。

代码是:

# -*- coding:utf-8 -*-

class Solution:

def PrintMinNumber(self,numbers):

if not numbers:

return ''

n = len(numbers)

for i in range(n):

numbers[i] = str(numbers[i])

print(numbers)

for i in range(n):

for j in range(i+1,n):

if numbers[i] + numbers[j] > numbers[j] + numbers[i]:

numbers[i],numbers[j] = numbers[j],numbers[i]

return ''.join(numbers)

热心网友 时间:2023-11-06 01:42

python中的数组,即使是*数组,貌似都是用的中括号表示吧? 花括号貌似都是针对字典的。

个人以为,可以先将原先的数组转换成列表,利用列表的内置方法排序并拼接后,再转换回去原来的格式。

原始数据,我不知道是什么格式。只是我以为,按照你的说法,跑不出元组、列表、字典等几种格式。这几种格式的转换相对还是比较简单的。

代码就不写了。个人以为这样的做法,应该比较合适。

热心网友 时间:2023-11-06 01:41

你的例子第一列全是 3,我给个例子吧:[321, 32, 3, 4],输出该是 321,32,3,4。

第一个数越大,则应该排在后面,毕竟 4XXX 是比 3XXX 大的。

setp 1: [0][1][2]
         3  2  1
         3  2
         3
         4
排序第 0 列,越大的排越后。
ret = [?, ?, ?, 4]

setp 2: [0][1][2]
         3  2  1
         3  2
         3 <3>     <- 补位 3,因为 3 是同 3 组第一个元素。
排序第 1 列,越大的排越后。
ret = [?, ?, 3, 4]

setp 3: [0][1][2]
         3  2  1
         3  2 <3>  <- 补位 3,因为 3 是同 3 组第一个元素。
排序第 2 列,越大的排越后。323 比 321 大,所以……
ret = [?, 32, 3, 4]

只剩一个,那个排第一:
ret = [321, 32, 3, 4]

以上就是基本思路了。综上可得:

1. 先按 [0] 列分组:

2. 组中每个数都补位到同样长度,然后再排序。

完整代码:

def joinmin(ls):
    groups = {}
    for item in ls:
        prefix = item
        n = 0
        while prefix > 10:
            prefix //= 10
            n += 1
        groups.setdefault(prefix, []).append([item, n])
    sorted_keys = list(sorted(groups))
    ret = 0
    for prefix in sorted_keys:
        items = groups[prefix]
        max_n = max([t[1] for t in items])
        presort_items = []
        for item, item_n in items:
            padding = item
            n = item_n
            while max_n > n:
                padding *= 10
                padding += prefix
                n += 1
            presort_items.append((padding, item, item_n))
        for _, item, n in sorted(presort_items):
            while n > -1:
                ret *= 10
                n -= 1
            ret += item
    return ret

不是看在你的分上答的,不过这种小题目蛮有趣的。

热心网友 时间:2023-11-06 01:41

import itertools

data = {3, 32, 321, 3432, 435, 64, 324}     # 最小组合数结果 321323243343243564
# data = {3, 32, 321}     # 最小组合数结果    321323

# 1、首先 data 是一个 set 集合,需要将其转换为 列表进行排序    sorted(list(data)))
# 2、然后通过python的内置库 itertools.permutations   进行排列组合
x = list(itertools.permutations(sorted(list(data))))

# 3、将排列组合出来的数先转为字符串
# 4、然后通过 join 将其组合成一个字符串
# 5、将组合出的数字字符串加入新的 set 集合中
new_data = set()
for i in x:
    n_str = "".join([str(n) for n in i])
    new_data.add(n_str)

# 6、将新的 set 集合转换成列表进行排序,取第一个就是最小的
min_n = sorted(list(new_data))[0]
print(min_n)    # 7、输出最小排列组合的值

热心网友 时间:2023-11-06 01:42

用int会越界的,所以先转成str

数字拼接满足结合律,所以只需要保证每两个数拼接后更小就行了,即ij?ji。因此,可以使用冒泡排序,但是比较的条件变成'i'+'j' > 'j' + 'i',如果满足就交换。

输出用print(''.join(list))即可,python打印字符串的时候不会带''的。

代码是:

# -*- coding:utf-8 -*-

class Solution:

def PrintMinNumber(self,numbers):

if not numbers:

return ''

n = len(numbers)

for i in range(n):

numbers[i] = str(numbers[i])

print(numbers)

for i in range(n):

for j in range(i+1,n):

if numbers[i] + numbers[j] > numbers[j] + numbers[i]:

numbers[i],numbers[j] = numbers[j],numbers[i]

return ''.join(numbers)

热心网友 时间:2023-11-06 01:42

python中的数组,即使是*数组,貌似都是用的中括号表示吧? 花括号貌似都是针对字典的。

个人以为,可以先将原先的数组转换成列表,利用列表的内置方法排序并拼接后,再转换回去原来的格式。

原始数据,我不知道是什么格式。只是我以为,按照你的说法,跑不出元组、列表、字典等几种格式。这几种格式的转换相对还是比较简单的。

代码就不写了。个人以为这样的做法,应该比较合适。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? c语言数字拼接成字符串 华为p8青春版手机不能开机怎么办 华为P8手机不能开机,是电池的坏了吗? 一头牛背上坐着一个人戴着帽子,帽子是个里字,请问其它七个是什么字? 鱼骨图的注意事项 大话3一转敏女妖应该穿怎么样的装备 C++中如何把数字和字符串拼接起来? Excel中怎么把文本与数字拼接? 帽子和衣服要如何搭配,才能起到和谐统一的效果? 按风水迷信属牛的人能带帽子吗 JAVA如何拼接数字 天天酷跑姐始祖耗牛配帽子先生 汽车配件质量问题优先减少计划鱼骨图分析法模板 C语言如何实现把两个整型数字拼接起来仍然是整型数字 一人骑着一头牛戴着一帽子猜一八字成语 Excel 如何拼接数字值不变? 印刷中经常出现的质量问题有哪些?用鱼骨图表示出来。 新大话西游3没有帽子怎么搭配强牛最高........ python,用get如何获取response里的值? 奶牛外套配什么颜色帽子!!! 华为p8不能开机了,怎么破? 玻璃自爆原因鱼骨图 华为p8按电源键无法开机也不能充电怎么办 把数组中的数拼接起来,求最大值 质量管理七大工具 华为P8无法开机并且充电指示灯也不亮怎么办 C语言 拼数字 华为p8max手机无法开机怎么办 PHP中字符串与数字拼接起来,用什么方法? 大话西游3 平民全敏男妖如何打造。。(是平民最多一个2阶仙器)装备详细解说。 华为p8无法开机重复开机界面 腾龙在线客服电话是13114162570吗? 如何拼接字符串和数字 大话西游3女妖强牛到85%以上怎么配? 腾龙娱乐客服tenlongkefu是吗? int类型数字拼接,如 string a=&quot;04&quot; ;int b =int .Parse(a); 结果b=4;前面的0丢失,我需要怎么拼接 大话西游3强牛装备怎么搭配? 华为p8青春版开不了机了,怎么办? SQL怎么拼接数字 谁知道大力女魔的装备怎么搭配比较NB