Skip to content

Commit 325d490

Browse files
committed
feat: add solutions to lc problem: No.0386
No.0386.Lexicographical Numbers
1 parent 3484b54 commit 325d490

File tree

7 files changed

+331
-148
lines changed

7 files changed

+331
-148
lines changed

solution/0300-0399/0386.Lexicographical Numbers/README.md

Lines changed: 117 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
<!-- 这里可写通用的实现逻辑 -->
4040

41-
DFS
41+
**方法一:DFS**
4242

4343
<!-- tabs:start -->
4444

@@ -49,18 +49,17 @@ DFS。
4949
```python
5050
class Solution:
5151
def lexicalOrder(self, n: int) -> List[int]:
52-
res = []
53-
54-
def dfs(i, n):
55-
if i > n:
52+
def dfs(u):
53+
if u > n:
5654
return
57-
res.append(i)
58-
for j in range(10):
59-
dfs(i * 10 + j, n)
55+
ans.append(u)
56+
for i in range(10):
57+
dfs(u * 10 + i)
6058

59+
ans = []
6160
for i in range(1, 10):
62-
dfs(i, n)
63-
return res
61+
dfs(i)
62+
return ans
6463
```
6564

6665
### **Java**
@@ -70,21 +69,42 @@ class Solution:
7069
```java
7170
class Solution {
7271
public List<Integer> lexicalOrder(int n) {
73-
List<Integer> res = new ArrayList<>();
72+
List<Integer> ans = new ArrayList<>();
7473
for (int i = 1; i < 10; ++i) {
75-
dfs(res, i, n);
74+
dfs(i, n, ans);
7675
}
77-
return res;
76+
return ans;
7877
}
7978

80-
private void dfs(List<Integer> res, int i, int n) {
81-
if (i > n) {
79+
private void dfs(int u, int n, List<Integer> ans) {
80+
if (u > n) {
8281
return;
8382
}
84-
res.add(i);
85-
for (int j = 0; j < 10; ++j) {
86-
dfs(res, i * 10 + j, n);
83+
ans.add(u);
84+
for (int i = 0; i < 10; ++i) {
85+
dfs(u * 10 + i, n, ans);
86+
}
87+
}
88+
}
89+
```
90+
91+
```java
92+
class Solution {
93+
public List<Integer> lexicalOrder(int n) {
94+
List<Integer> ans = new ArrayList<>();
95+
int v = 1;
96+
for (int i = 0; i < n; ++i) {
97+
ans.add(v);
98+
if (v * 10 <= n) {
99+
v *= 10;
100+
} else {
101+
while (v % 10 == 9 || v + 1 > n) {
102+
v /= 10;
103+
}
104+
++v;
105+
}
87106
}
107+
return ans;
88108
}
89109
}
90110
```
@@ -95,22 +115,36 @@ class Solution {
95115
class Solution {
96116
public:
97117
vector<int> lexicalOrder(int n) {
98-
vector<int> res;
99-
for (int i = 1; i < 10; ++i)
100-
{
101-
dfs(res, i, n);
102-
}
103-
return res;
118+
vector<int> ans;
119+
for (int i = 1; i < 10; ++i) dfs(i, n, ans);
120+
return ans;
104121
}
105122

106-
void dfs(vector<int> &res, int i, int n) {
107-
if (i > n)
108-
return;
109-
res.push_back(i);
110-
for (int j = 0; j < 10; ++j)
123+
void dfs(int u, int n, vector<int>& ans) {
124+
if (u > n) return;
125+
ans.push_back(u);
126+
for (int i = 0; i < 10; ++i) dfs(u * 10 + i, n, ans);
127+
}
128+
};
129+
```
130+
131+
```cpp
132+
class Solution {
133+
public:
134+
vector<int> lexicalOrder(int n) {
135+
vector<int> ans;
136+
int v = 1;
137+
for (int i = 0; i < n; ++i)
111138
{
112-
dfs(res, i * 10 + j, n);
139+
ans.push_back(v);
140+
if (v * 10 <= n) v *= 10;
141+
else
142+
{
143+
while (v % 10 == 9 || v + 1 > n) v /= 10;
144+
++v;
145+
}
113146
}
147+
return ans;
114148
}
115149
};
116150
```
@@ -119,22 +153,40 @@ public:
119153

120154
```go
121155
func lexicalOrder(n int) []int {
122-
var res []int
123-
var dfs func(int, int)
124-
dfs = func(i, n int) {
125-
if i > n {
156+
var ans []int
157+
var dfs func(u int)
158+
dfs = func(u int) {
159+
if u > n {
126160
return
127161
}
128-
res = append(res, i)
129-
for j := 0; j < 10; j++ {
130-
dfs(i*10+j, n)
162+
ans = append(ans, u)
163+
for i := 0; i < 10; i++ {
164+
dfs(u*10 + i)
131165
}
132166
}
133-
134167
for i := 1; i < 10; i++ {
135-
dfs(i, n)
168+
dfs(i)
169+
}
170+
return ans
171+
}
172+
```
173+
174+
```go
175+
func lexicalOrder(n int) []int {
176+
var ans []int
177+
v := 1
178+
for i := 0; i < n; i++ {
179+
ans = append(ans, v)
180+
if v*10 <= n {
181+
v *= 10
182+
} else {
183+
for v%10 == 9 || v+1 > n {
184+
v /= 10
185+
}
186+
v++
187+
}
136188
}
137-
return res
189+
return ans
138190
}
139191
```
140192

@@ -162,6 +214,31 @@ impl Solution {
162214
}
163215
```
164216

217+
### **JavaScript**
218+
219+
```js
220+
/**
221+
* @param {number} n
222+
* @return {number[]}
223+
*/
224+
var lexicalOrder = function (n) {
225+
let ans = [];
226+
function dfs(u) {
227+
if (u > n) {
228+
return;
229+
}
230+
ans.push(u);
231+
for (let i = 0; i < 10; ++i) {
232+
dfs(u * 10 + i);
233+
}
234+
}
235+
for (let i = 1; i < 10; ++i) {
236+
dfs(i);
237+
}
238+
return ans;
239+
};
240+
```
241+
165242
### **...**
166243

167244
```

0 commit comments

Comments
 (0)