本文主要是介绍字典序排数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
LintCode 每日一题 22.2.18
字典序排数
描述
给定一个整数 n, 返回从 1 到 n 的字典顺序。
样例
样例1:
输入: 13
输出 : [1,10,11,12,13,2,3,4,5,6,7,8,9]
样例2:
输入: 10
输出 : [1,10,2,3,4,5,6,7,8,9]
科普:
字典顺序:在 数学 中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法。. 这种泛化主要在于定义有序完全有序集合(通常称为字母表)的元素的序列(通常称为计算机科学中的单词)的总顺序。. 对于数字1、2、3…n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。. 例如对于5个数字的排列 12354和12345,排列12345在前,排列12354在后。. 按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是 54321。
通俗来讲:设想一本英语字典里的单词,何者在前何者在后?显然的做法是先按照第一个字母、以 a、b、c……z 的顺序排列;如果第一个字母一样,那么比较第二个、第三个乃至后面的字母。如果比到最后两个单词不一样长(比如,sigh 和 sight),那么把短者排在前。
function fn(n){let arr = [1,2,3,4,5,6,7,8,9]// 记录数组let arr2 = []// 计数器let a = 0for (let i = 1; i <= n; i++) {// 获取第一位数let num = i.toString().substring(0,1)// 当num 为十位百位数时,a初始化if(arr2.indexOf(num)==-1&&i>9){arr2.push(num)a=0}// 包含第一位数且没有该数的插入到对应位if(arr.indexOf(num)&& i != num){// if()let index = arr.findIndex(val=>val==num)// 如果插入位大于被插入位,才可插if(i>num){arr.splice(index+a+1,0,i)a++}}console.log(arr);}return arr}fn(130)
原题出处:https://www.lintcode.com/problem/1267/
感想:好气啊,我的代码运行在vscode都没问题,到它的网站就检查出有问题,辛苦我一个小时才干出来的,它简简单单就否决了😟,要是说我的逻辑错误也好啊
网站检查:
网站开发者输出:
这篇关于字典序排数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!