Skip to main content

386.js

/** ------------------------------------------------------------------------------
*
* 386. Lexicographical Numbers
* Topics: DFS
* https://leetcode.com/problems/lexicographical-numbers/description/
*
------------------------------------------------------------------------------ */
/**
* @param {number} n
* @return {number[]}
* 이게되네
*/
var lexicalOrder = function (n) {
const array = Array.from({ length: n }, () => 0)

for (let i = 1; i <= n; i++) {
array[i - 1] = i
}

return array.sort((a, b) => a.toString().localeCompare(b.toString()))
}

/**
* dfs 풀이
*/
var lexicalOrder = function (n) {
const arr = []

const dfs = (num, n) => {
if (num > n) return

arr.push(num)

for (let i = 0; i <= 9; i++) {
dfs(num * 10 + i, n)
}
}

for (let i = 1; i <= 9; i++) {
dfs(i, n)
}

return arr
}

/**
* 다른 풀이
*/
var lexicalOrder = function (n) {
let output = []
let currentNumber = 1

for (let i = 0; i < n; i++) {
output.push(currentNumber)

if (currentNumber * 10 <= n) {
currentNumber *= 10
} else {
if (currentNumber >= n) {
currentNumber = Math.floor(currentNumber / 10)
}
currentNumber += 1

while (currentNumber % 10 === 0) {
currentNumber = Math.floor(currentNumber / 10)
}
}
}

return output
}

console.log(lexicalOrder(13))