牛客网-剑指office-把数组排成最小的数

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
自己写一个排序规则,将两个数字都转成字符串,然后比较不同次序的排序后的字符串,输出较小的一个。
最后将排序好的数组按顺序拼接好输出即可。

class Solution{
public:
	string PrintMinNumber(vector<int> numbers){
		string ans;
		if (numbers.empty()) return ans;
		sort(numbers.begin(), numbers.end(), cmp);
		for (int i = 0; i < numbers.size(); ++i)
		{
			ans += to_string(numbers[i]);
		}
		return ans;
	}
	 static bool cmp(int a, int b)
	{
		string str1 = to_string(a);
		string str2 = to_string(b);
		return (str1 + str2) < (str2 + str1);
	}
};

python 的解法:
其中lstrip() 方法用于截掉字符串左边的空格或指定字符。

# -*- coding:utf-8 -*-
from functools import cmp_to_key
class Solution:
    def cmp(self, a, b):
        if a + b > b + a:
            return 1
        if a + b < b + a:
            return -1
        else:
            return 0
    def PrintMinNumber(self, numbers):
        # write code here
        if len(numbers) == 0:
            return ""
        numstr = list(map(str, numbers))
        numstr.sort(key=cmp_to_key(self.cmp))
        return"".join(number).lstrip('0')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值