其他分享
首页 > 其他分享> > [Leetcode]23.字典序排数

[Leetcode]23.字典序排数

作者:互联网

题目:

给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。

你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。

示例 1:

输入:n = 13
输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]

示例 2:

输入:n = 2
输出:[1,2]

思想:实际上是一个树的遍历,

从1出发,我们将其放入数组中,扩大10倍,判断是否在范围内,在的话追加到数组后面,如果判断到不在范围,我们缩小10倍,回到上一结点,首先判断其是否末尾是9,如果是的话,我们需要将其返回到个位进入根结点下的父节点的那个右兄弟结点,否则我们将其加1,到当前结点的右兄弟结点继续遍历。

func lexicalOrder(n int) []int {
	s := make([]int, 0)
	num := 1
	for {
		if num <= n {
			s = append(s, num)
			num *= 10
		} else {
			num /= 10
			for num%10 == 9 {
				num /= 10
			}
			if num == 0 {
				break
			}
			num++
		}
	}
	return s
}

 



题目来源:https://leetcode-cn.com/problems/lexicographical-numbers

标签:10,结点,排数,23,int,示例,13,num,Leetcode
来源: https://www.cnblogs.com/End1ess/p/15541243.html