数组排成最小的数字 python

本文介绍一种算法,该算法接收一个正整数数组,通过比较每两个数字拼接后的大小,对数组进行排序,最终得到能拼接成的最小数字。例如,对于数组{3,32,321}

 算法知识视频讲解

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

 

# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        if not numbers:
            return ''
        numstr = list(map(str,numbers)) #用str方式将int型数字转换成string
        for i in range(len(numstr)):
            for j in range(i+1,len(numstr)):
                a=int(numstr[i]+numstr[j])
                b=int(numstr[j]+numstr[i])
                if(a>b):
                    t=numstr[i]
                    numstr[i]=numstr[j]
                    numstr[j]=t
        s=""
        for i in range(len(numstr)):
            s=s+numstr[i]
        return int(s)
        # write code here

### 对数字数组进行降序排列 对于不同编程语言,可以采用特定的方式对数字数组执行降序排序。 #### JavaScript 实现 在 JavaScript 中,`sort()` 方法可用于对数组元素进行原地排序。为了实现降序排序,需向 `sort()` 提供一个比较函数 `(a, b) => b - a` 。此函数定义了当两个元素相等时保持原有顺序;如果前者应位于后者之后,则返回正值[^2]。 ```javascript let arr = [1, 3, 4, 6, 5, 2]; arr.sort((a, b) => { return b - a; }); console.log(arr); ``` 这段代码会输出 `[6, 5, 4, 3, 2, 1]` ,即原始数组按数值大小进行了逆序重排。 #### Python 实现 Python 内置的 `sorted()` 函数以及列表对象自身的 `sort()` 方法都支持通过指定关键字参数 `reverse=True` 来完成降序操作: ```python numbers = [1, 3, 4, 6, 5, 2] sorted_numbers_descending = sorted(numbers, reverse=True) print(sorted_numbers_descending) # 或者直接调用列表的 sort() 方法 numbers.sort(reverse=True) print(numbers) ``` 两种方式都将打印出相同的有序序列:`[6, 5, 4, 3, 2, 1]`. #### Java 实现 针对 Java 编程环境下的整数类型 (`int`) 数组,可借助 Arrays 类提供的静态方法 `Arrays.sort()` 结合自定义 Comparator 接口来达成目标。不过更简便的做法是先将基本类型的数组转换成包装类 Integer[] 形式的数组再利用其内置特性处理[^4]. ```java import java.util.Arrays; public class Main { public static void main(String[] args){ int[] nums = {1, 3, 4, 6, 5, 2}; Arrays.sort(nums); // 先升序排序 // 手动反转已排序好的数组得到最终结果 for (int i=0,j=nums.length-1;i<j;i++,j--){ int temp = nums[i]; nums[i]=nums[j]; nums[j]=temp; } System.out.println(Arrays.toString(nums)); } } ``` 上述实例展示了如何通过对数组先做一次自然升序排序后再交换位置的方式来间接获得降序效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值