Algorithm 如何排序数字1。。。n不将数字转换为字符串的词典?

Algorithm 如何排序数字1。。。n不将数字转换为字符串的词典?,algorithm,math,Algorithm,Math,假设我输入了n如何打印此序列而不将数字转换为字符串 i、 e:- n=100 输出:-1101112131415171819220… n=15输出:-110112131515243456789 n=20输出:-1101111315161718192203456789 这里的主要因素是什么 我的初始解决方案将打印1后跟0或2后跟0 int n = 100; for (int i = 1; i <= n; i++) { int x = i; while

假设我输入了
n
如何打印此序列而不将数字转换为字符串

i、 e:-

n=100
输出:-
1101112131415171819220…

n=15
输出:-
110112131515243456789

n=20
输出:-
1101111315161718192203456789

这里的主要因素是什么

我的初始解决方案将打印1后跟0或2后跟0

 int n = 100;
    for (int i = 1; i <= n; i++) {
        int x = i;
        while (x <= n) {
            System.out.println(x);
            x *= 10;
        }
    }
int n=100;

对于(int i=1;i我找到了解决方案:-

您可以使用首字母
k=1来调用它
例如
printnum(15,1

void printnums(int n, int k) {
    if (k > n) {
        return;
    }

    for (int i = 0; i < 10; i++) {
        if (k <= n) {
            System.out.println(k);

            k *= 10;
            printnums(n, k);
            k /= 10;
            k++;
            if (k % 10 == 0) return;
        }
    }
}
void printnums(int n,int k){
如果(k>n){
返回;
}
对于(int i=0;i<10;i++){

如果(k这里是基于OP自己的答案的Python浓缩解决方案:

def genRangeLexiSorted(n, k=1):
  for i in range(k, min(k+10-k%10, n+1)):
    yield i
    for j in genRangeLexiSorted(n, 10*i):
      yield j

def printnums(n):
  print(*list(genRangeLexiSorted(n)))
然后电话

printnums(1)
printnums(9)
printnums(11)
printnums(20)
printnums(100)
给出以下输出:

1
1 2 3 4 5 6 7 8 9
1 10 11 2 3 4 5 6 7 8 9
1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9
1 10 100 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 25 26 27 28 29 3 30 31 32 33 34 35 36 37 38 39 4 40 41 42 43 44 45 46 47 48 49 5 50 51 52 53 54 55 56 57 58 59 6 60 61 62 63 64 65 66 67 68 69 7 70 71 72 73 74 75 76 77 78 79 8 80 81 82 83 84 85 86 87 88 89 9 90 91 92 93 94 95 96 97 98 99

第二,事实上。1)我看不到这里的模式,这些例子当然有多种解释——请具体说明你想要的函数。2)你试过什么了吗?有什么出发点吗?(如果问题是关于找到模式——我很确定这是离题的。)@phipsgabler您可以想象命名文件……我的第一个想法是将第二个num转换为float?排序似乎是基于数字的字符串表示,而不是数字值。因此问题似乎是:如何打印数字1,…n按字典排序,而不将数字转换为字符串?很好的解决方案。可以进行一些简化,例如
k*=10;printnums(n,k);k/=10;
相当于
printnums(n,10*k);
。参数
k
可以有默认值1。是的,深度优先搜索是一种方法。