Lexicographical Numbers
题意
给定一个n,将1-n共n个数字按照字典序排序。
解法
有两种解法,一种是用递归,一种直接循环即可。。
无论是啥,首先我们得知道这个题目的思路。既然按照字典序,我们首先举个n=100的例子
|
|
从上面我们可以看出,首先一个给定当前的数字cur,那么我们首先看cur*10是否<=n,如果满足条件,那么我们肯定首先取cur*10,因为它的字典序最小,否则我们就看当前数字是否是以9结尾的,如果不是9结尾的且cur+1<=n,那么取cur+1。如果是以9结尾的,比如看59这个数字,后面跟的是6,就是将59//10+1,就是要对10取商取到结尾不为9的时候,然后+1.
这上面其实是循环的思路,递归的思路其实是一样的。就是枚举数字的开头,也就是1-9,然后如果对枚举的数字*10+i(0<=i<10),符合条件的就递归。
代码
非递归
|
|
递归
|
|