题目
题目链接:
https://www.nowcoder.com/practice/fc897457408f4bbe9d3f87588f497729
思路
贪心解法
对于 numsnums 中的任意两个值 aa 和 bb,
我们无法直接从常规角度上确定其大小/先后关系。
但我们可以根据「结果」来决定 aa 和 bb 的排序关系:
如果拼接结果 abab 要比 baba 好,那么我们会认为 aa 应该放在 bb 前面。
另外,注意我们需要处理前导零(最多保留一位)。
参考答案Java
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 最大数
* @param nums int整型一维数组
* @return string字符串
*/
public String solve (int[] nums) {
/*
贪心解法
对于 numsnums 中的任意两个值 aa 和 bb,我们无法直接从常规角度上确定其大小/先后关系。
但我们可以根据「结果」来决定 aa 和 bb 的排序关系:
如果拼接结果 abab 要比 baba 好,那么我们会认为 aa 应该放在 bb 前面。
另外,注意我们需要处理前导零(最多保留一位)。
*/
int n = nums.length;
String[] arr = new String[n];
boolean all0 = true;
for (int i = 0; i < n ; i++) {
arr[i] = String.valueOf(nums[i]);
if (nums[i] != 0 && all0) all0 = false;
}
if (all0) return "0";
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return (b + a).compareTo(a + b);
}
});
StringBuilder ans = new StringBuilder();
for (String s : arr) {
ans.append(s);
}
return ans.toString();
}
}
参考答案Go
package main
import (
"sort"
"strconv"
"strings"
)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 最大数
* @param nums int整型一维数组
* @return string字符串
*/
func solve(nums []int) string {
/*
贪心解法
对于 numsnums 中的任意两个值 aa 和 bb,我们无法直接从常规角度上确定其大小/先后关系。
但我们可以根据「结果」来决定 aa 和 bb 的排序关系:
如果拼接结果 abab 要比 baba 好,那么我们会认为 aa 应该放在 bb 前面。
另外,注意我们需要处理前导零(最多保留一位)。
*/
n := len(nums)
arr := make([]string, n)
all0 := true
for i := 0; i < n; i++ {
arr[i] = strconv.Itoa(nums[i])
if nums[i] != 0 && all0 {
all0 = false
}
}
if all0 {
return "0"
}
sort.Slice(arr, func(i, j int) bool {
return arr[j]+arr[i] <= arr[i]+arr[j]
})
var builder strings.Builder
for _, v := range arr {
builder.WriteString(v)
}
return builder.String()
}
参考答案PHP
<?php
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 最大数
* @param nums int整型一维数组
* @return string字符串
*/
function solve( $nums )
{
/*
贪心解法
对于 numsnums 中的任意两个值 aa 和 bb,我们无法直接从常规角度上确定其大小/先后关系。
但我们可以根据「结果」来决定 aa 和 bb 的排序关系:
如果拼接结果 abab 要比 baba 好,那么我们会认为 aa 应该放在 bb 前面。
另外,注意我们需要处理前导零(最多保留一位)。
*/
$n = count($nums);
$arr = array();
$all0 = true;
for($i=0;$i<$n;$i++){
$arr[$i]= $nums[$i].'';
if($nums[$i] != 0 && $all0){
$all0=false;
}
}
if ($all0) return '0';
usort($arr,function ($a,$b){
return $b.$a >= $a.$b;
});
$ans = '';
foreach ($arr as $v){
$ans.=$v;
}
return $ans;
}