[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

posted @ 2021-11-11 18:48  梦想是能睡八小时的猪  阅读(54)  评论(0)    收藏  举报