(算法)最⼤数————<贪⼼>

1. 题⽬链接:179.最⼤数

2. 题⽬描述

3. 解法(贪⼼):

可以先优化:

将所有的数字当成字符串处理,那么两个数字之间的拼接操作以及⽐较操作就会很⽅便。

贪⼼策略:

按照题⽬的要求,重新定义⼀个新的排序规则,然后排序即可。

排序规则:

a. 「A拼接B」⼤于「B拼接A」,那么A在前,B在后;

b. 「A拼接B」等于「B拼接A」,那么AB的顺序⽆所谓;

c. 「A拼接B」⼩于「B拼接A」,那么B在前,A在后; 

C++算法代码: 

class Solution 
{
public:
    string largestNumber(vector<int>& nums) 
    {
        //将所有数转为字符串
        vector<string>t;
        for(auto& key:nums)
        {
            t.push_back(to_string(key));
        }
        //排序
        sort(t.begin(),t.end(),[](const string& a,const string& b)
        {
            return a+b>b+a;
        });
        //连接
        string answer;
        for(auto& key:t)
        {
            answer+=key;
        }
        //判断输出
        //当字符串为一长串0时,需要化简为一个0
        if(answer[0]=='0')
        {
            return "0";
        }
        else
        {
            return answer;
        }
    }
};

Java算法代码

class Solution
{
	public String largestNumber(int[] nums)
	{
		// 优化:把所有的数转化成字符串 
		int n = nums.length;
		String[] strs = new String[n];
		for (int i = 0; i < n; i++) strs[i] = "" + nums[i];
		// 排序 
		Arrays.sort(strs, (a, b) ->
		{
			return (b + a).compareTo(a + b);
		});
		// 提取结果 
		StringBuffer ret = new StringBuffer();
		for (String s : strs) ret.append(s);
		if (ret.charAt(0) == '0') return "0";
		return ret.toString();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

课堂随笔

感谢支持~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值