网站群建设目标网络推广外包公司
最大排列
题目
给定一组整数,重排序后输出一个最大的整数
输入
数字组合
输出
最大的整数
示例一
输入
10 9
输出
910
解题思路
我们可以读入一个字符串,将字符串中的单词按照每个单词的字典序长度,字典序从大到小的顺序排序,最后输出排序后的结果。
- 使用readline模块实现从命令行读入一个字符串,并在读入完成后调用solveMethod()方法。
- solveMethod()方法首先通过split()方法将字符串按照空格分割成单词数组。
- 对单词数组排序:
- a. 取出两个单词,计算出这两个单词的字典序长度,并将这两个单词转化为字符数组。
- b. 遍历两个单词的字符数组,如果在任意位置出现不同的字符,则返回以字符的ASCII码为依据的比较结果。
- c. 如果字典序长度不同,则比较短的单词的第一个字符与长的单词的其他字符。
- 最后通过console.log()方法输出排序后的结果。
考点分析
- Node.js基础
- readline模块的使用
- JavaScript字符串和数组的操作,如split()、sort()、join()等方法
- JavaScript字符串的字符编码,如charCodeAt()方法。
Code
const readline = require('readline');
const rl = readline.createInterface({input: process.stdin,output: process.stdout
});rl.question('Enter a string of words separated by spaces: ', line => {solveMethod(line);rl.close();
});const solveMethod = line => {const s = line.split(' ').sort((s1, s2) => {const len1 = s1.length;const len2 = s2.length;const lim = Math.min(len1, len2);const v1 = s1.split('');const v2 = s2.split('');let k = 0;while (k < lim) {const c1 = v1[k];const c2 = v2[k];if (c1 !== c2) {return c2.charCodeAt(0) - c1.charCodeAt(0);}k++;}if (len1 > len2) {while (k < len1) {if (v1[k].charCodeAt(0) > v2[0].charCodeAt(0)) {return -1;}k++;}return 1;} else if (len2 > len1) {while (k < len2) {if (v2[k].charCodeAt(0) > v1[0].charCodeAt(0)) {return -1;}k++;}return 1;} else {return 0;}});console.log(s.join(''));
};
版权说明
试题来源:华为 OD 联盟整理收集
题解:解题思路 与 代码 为原创内容,该部分版权由 OD 联盟共同拥有,并授权组内成员发布。
目标:👉 助你解开所有机试题