java解法

自定义排序:
代码中的核心是自定义排序,使用 Arrays.sort 对字符串数组进行排序。排序的规则是:

比较两个字符串 x 和 y 时,我们构造出 x + y 和 y + x 两个新的字符串。如果 y + x 字符串字典序较小(即在排序时应该排在前面),则 x 排在 y 前面;否则,y 排在 x 前面。
这种方式是通过 compareTo 方法来实现的,比较的是两个字符串拼接后的字典顺序,从而达到构建最大数字的目的。
构建最终的数字:
排序完成后,通过一个 StringBuilder 来拼接排序后的字符串数组,形成最终的最大数字。

输出结果:
使用 System.out.println(maxNumber.toString()) 输出拼接后的字符串

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象用于接收输入
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入的字符串并按逗号分隔成一个字符串数组
        String[] numbers = scanner.next().split(",");
        
        // 对数字字符串数组进行自定义排序
        Arrays.sort(numbers, new Comparator<String>() {
            @Override
            public int compare(String x, String y) {
                // 比较两个字符串拼接后的结果,目的是通过拼接找到哪个顺序能组成更大的数字
                return (y + x).compareTo(x + y);
            }
        });

        // 使用StringBuilder来拼接排序后的数组
        StringBuilder maxNumber = new StringBuilder();
        for (String number : numbers) {
            maxNumber.append(number);  // 拼接每一个排序后的字符串
        }

        // 输出拼接后的最大数字
        System.out.println(maxNumber.toString());
    }
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C++解法

程序首先使用 getline 读取整行输入,并存储在 inp 字符串中。
然后,使用 stringstream 来按逗号分隔 inp 字符串,将分隔后的子串存入 vector 类型的数组 arr 中。
自定义排序:

cmp 函数用于自定义排序规则。它通过比较两个字符串拼接的结果 b + a 和 a + b 来判断哪个字符串应该排在前面。通过这种方式,可以确保将较大的数字排在前面。
构建最终的数字:

排序后的字符串数组通过遍历拼接成一个最终的大字符串 res。
输出拼接后的结果。
返回结果:

输出拼接后的字符串,即构成的最大数字

#include 
#include 
#include 
#include 
#include 

using namespace std;

// 自定义比较函数,用于排序时根据两个字符串拼接后的结果进行比较
bool cmp(const string& a, const string& b) {
    // 比较 a + b 和 b + a,返回 true 表示 a 应该排在 b 前面
    return (b + a) < (a + b);  
}

int main() {
    // 读取整行输入
    string inp;
    getline(cin, inp);  // 读取输入字符串,并存储到 inp 中

    // 将输入的字符串按逗号分隔,存入数组 arr 中
    vector<string> arr;
    stringstream ss(inp);  // 使用 stringstream 处理输入字符串
    string tok;

    // 使用 getline 函数按逗号分割字符串
    while (getline(ss, tok, ',')) {
        arr.push_back(tok);  // 将每个分割出来的字符串存入 vector
    }

    // 使用自定义的比较函数对字符串数组进行排序
    sort(arr.begin(), arr.end(), cmp);

    // 拼接排序后的字符串数组,构造出最大数字
    string res;
    for (const auto& s : arr) {
        res += s;  // 将每个排序后的字符串连接到 res 末尾
    }

    // 输出最终拼接的最大数字
    cout << res << endl;

    return 0;
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

JS解法

排序:
对数组中的字符串按照自定义的规则进行排序。我们希望通过比较两个字符串拼接后的结果 b + a 和 a + b 来决定它们的顺序。这是为了确保拼接后的结果能够形成最大数字。

拼接结果:
排序完成后,数组中的元素按照排序后的顺序拼接成一个大字符串。如果拼接结果是一个以 0 开头的字符串(例如,[“0”, “0”]),则返回 “0”;否则返回拼接后的结果。

输出:
输出最终拼接后的字符串,即最大数字。

const readline = require("readline");

// 创建一个 readline 接口,用于读取标准输入
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

// 监听每一行输入
rl.on("line", (line) => {
  // 将输入的字符串按逗号分隔成数组
  const nums = line.split(",");
  
  // 调用 createLargestNumber 函数,传入数组,输出结果
  console.log(createLargestNumber(nums));
});

// 创建最大数字的函数
function createLargestNumber(nums) {
  // 使用自定义排序规则对数组进行排序
  nums.sort((a, b) => {
    // 比较 a + b 和 b + a,返回值决定了排序的顺序
    return (b + a).localeCompare(a + b);
  });

  // 将排序后的数组拼接成一个字符串,如果结果是 "0",则返回 "0"
  return nums.reduce((acc, curr) => acc + curr, "") || "0";
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/145099491"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!