В основном, это то, что нужно сделать, это перейти к некоторому числу и добавить цифры от 0 до 9, а затем перейти к этим цифрам и добавить от 0 до 9, пропуская числа, большие N (13 в этом случае).
Вот шаг пара прошлифованного
Это может быть проще, чтобы посмотреть, что происходит, посмотрев на «я» по центру слева.
"i" return
1 //Add to list {1}
10 //Add to list {1,10}
100 //Bigger than n! (n = 13) {1,10}
11 //Add to list {1,10,11}
110 //Bigger than n! (n = 13) {1,10,11}
12 //Add to list {1,10,11,12}
120 //Bigger than n! (n = 13) {1,10,11,12}
13 //Add to list {1,10,11,12,13}
130 //Bigger than n! (n = 13) {1,10,11,12,13}
14 //Bigger than n! (n = 13) {1,10,11,12,13}
2 //Add to list {1,10,11,12,13,2}
20 //Bigger than n! (n = 13) {1,10,11,12,13,2}
3 //Add to list {1,10,11,12,13,2,3}
30 //Bigger than n! (n = 13) {1,10,11,12,13,2,3}
4 //Add to list {1,10,11,12,13,2,3,4}
40 //Bigger than n! (n = 13) {1,10,11,12,13,2,3,4}
5 //Add to list {1,10,11,12,13,2,3,4,5}
50 //Bigger than n! (n = 13) {1,10,11,12,13,2,3,4,5}
6 //Add to list {1,10,11,12,13,2,3,4,5,6}
60 //Bigger than n! (n = 13) {1,10,11,12,13,2,3,4,5,6}
7 //Add to list {1,10,11,12,13,2,3,4,5,6,7}
70 //Bigger than n! (n = 13) {1,10,11,12,13,2,3,4,5,6,7}
8 //Add to list {1,10,11,12,13,2,3,4,5,6,7,8}
80 //Bigger than n! (n = 13) {1,10,11,12,13,2,3,4,5,6,7,8}
9 //Add to list {1,10,11,12,13,2,3,4,5,6,7,8,9}
90 //Bigger than n! (n = 13) {1,10,11,12,13,2,3,4,5,6,7,8,9}
10 //Bigger than end! (end = 9) {1,10,11,12,13,2,3,4,5,6,7,8,9}
Более полная версия того, что происходит:
lexicalOrder(13)
result = {}
dfs(1,9,13,result) //1 is the smallest digit, 9 is the largest digit,
//13 is the largest possible value,
//Passed in "result" array to be edited.
i = start
//i = 1
Enter Loop
result.add(1)
//result = {1}
dfs(10,19,13,result)
i = start
//i = 10
Enter Loop
result.add(10)
//result = {1,10}
dfs(100,109,13,result)
i = start
//i = 100
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 11
result.add(11)
//result = {1,10,11}
dfs(110,119,13,result)
i = start
//i = 110
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 12
result.add(12)
//result = {1,10,11,12}
dfs(120,129,13,result)
i = start
//i = 120
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 13
result.add(13)
//result = {1,10,11,12,13}
dfs(130,139,13,result)
i = start
//i = 130
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 14
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 2
result.add(i)
//result = {1,10,11,12,13,2}
dfs(20,29,13,result)
i = start
//i = 20
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 3
result.add(i)
//result = {1,10,11,12,13,2,3}
dfs(30,39,13,result)
i = start
//i = 30
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 4
result.add(i)
//result = {1,10,11,12,13,2,3,4}
dfs(40,49,13,result)
i = start
//i = 40
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 5
result.add(i)
//result = {1,10,11,12,13,2,3,4,5}
dfs(50,59,13,result)
i = start
//i = 50
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 6
result.add(i)
//result = {1,10,11,12,13,2,3,4,5,6}
dfs(60,69,13,result)
i = start
//i = 60
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 7
result.add(i)
//result = {1,10,11,12,13,2,3,4,5,6,7}
dfs(70,79,13,result)
i = start
//i = 70
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 8
result.add(i)
//result = {1,10,11,12,13,2,3,4,5,6,7,8}
dfs(80,89,13,result)
i = start
//i = 80
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 9
result.add(i)
//result = {1,10,11,12,13,2,3,4,5,6,7,8,9}
dfs(90,99,13,result)
i = start
//i = 90
Enter Loop
Whoops! "i" is greater than "n"! //n = 13
Exit Loop
i++
//i = 10
Whoops! "i" is greater than "end"! //end = 9
return result // result = {1,10,11,12,13,2,3,4,5,6,7,8,9}
Шаг через него с *** отладчик ***. Кроме того, 'return IntStream.rangeClosed (1, n) .boxed(). Sorted ((a, b) -> String.valueOf (a) .compareTo (String.valueOf (b))) \t \t \t .collect (Collectors.toList()); ' –
Я прошел через отладчик, и я вижу, что происходит. начало и конец действительно становятся 100 и 109, а затем условие в цикле while терпит неудачу, так как i уже не меньше n. НО, я думаю, я все еще немного запутался в том, как мы закончим в 10 и 19. –
@ElroyJetson 'dfs (10,19, n, result)' получает вызов более одного раза – Natecat