38
38
39
39
<!-- 这里可写通用的实现逻辑 -->
40
40
41
- DFS。
41
+ **方法一: DFS**
42
42
43
43
<!-- tabs:start -->
44
44
49
49
```python
50
50
class Solution:
51
51
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:
56
54
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 )
60
58
59
+ ans = []
61
60
for i in range(1, 10):
62
- dfs(i, n )
63
- return res
61
+ dfs(i)
62
+ return ans
64
63
```
65
64
66
65
### **Java**
@@ -70,21 +69,42 @@ class Solution:
70
69
```java
71
70
class Solution {
72
71
public List<Integer> lexicalOrder(int n) {
73
- List<Integer> res = new ArrayList<>();
72
+ List<Integer> ans = new ArrayList<>();
74
73
for (int i = 1; i < 10; ++i) {
75
- dfs(res, i, n);
74
+ dfs(i, n, ans );
76
75
}
77
- return res ;
76
+ return ans ;
78
77
}
79
78
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) {
82
81
return;
83
82
}
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
+ }
87
106
}
107
+ return ans;
88
108
}
89
109
}
90
110
```
@@ -95,22 +115,36 @@ class Solution {
95
115
class Solution {
96
116
public:
97
117
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;
104
121
}
105
122
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)
111
138
{
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
+ }
113
146
}
147
+ return ans;
114
148
}
115
149
};
116
150
```
@@ -119,22 +153,40 @@ public:
119
153
120
154
```go
121
155
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 {
126
160
return
127
161
}
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 )
131
165
}
132
166
}
133
-
134
167
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
+ }
136
188
}
137
- return res
189
+ return ans
138
190
}
139
191
```
140
192
@@ -162,6 +214,31 @@ impl Solution {
162
214
}
163
215
```
164
216
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
+
165
242
### **...**
166
243
167
244
```
0 commit comments