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