目录
组成最大数
考察排序
题目描述
小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来回以组成多种数字。
输入描述
","号分割的多个正整数字符串,不需要考虑非数字异常情况,小组最多25个人。
输出描述
最大的数字字符串
示例1
输入
22,221
输出
22221
示例2
输入
22,221,35,351,356
输出
3563535122221
解析
通过逗号分割成若干个数组,高位数字越大的应该越放前面。需要考虑不同个数的数字该如何排序,例如456,43632,这种比较前三位即可出结果456排前面。
例子改为456和456457时应该谁排前面?这里可以通过循环小的位数补齐判断,456456和456457可以得出456457排前面。所以我们可以将所有的位数不够6位的循环补齐6位后再直接排序。
答案
function getMaxNumber(str) {
let numArr = str.split(',')
numArr = numArr.map(v => ({
value: v,
sortValue: v.repeat(6).slice(0, 6)
}))
numArr.sort((a, b) => b.sortValue - a.sortValue)
return numArr.map(v => v.value).join('')
}
console.log(getMaxNumber('22,221,35,351,356'))
第k个排列
考察分解问题,排列
题目描述
给定参数n,从1到n会有n个整数:1,2,3,...,n,这n个数字共有n!种排列。按大小顺序升序列出所有排列情况,并一一标记,
当n=3时,所有排列如下:
'123'
'132'
'213'
'231'
'312'
'321'
给定n和k,返回第k个排列
输入描述
输入两行,第一行为n,第二行为k,给定n的范围是[1,9],给定k的范围是[1,n!]。
输出描述
输出排在第k位置的数字。
示例1
输入
3
3
输出
213
示例2
输入
4
7
输出
2134
解析
分解问题,每次取出