C ++中的词典数字

假设我们有一个整数n。我们必须按字典顺序返回1到n。因此,例如,当给定13时,输出将为[1、10、11、12、13、2、3、4、5、6、7、8、9]。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个大小为n的数组ret

  • curr:= 1

  • 对于i,范围为0至n – 1

    • 如果curr> = n,则curr:= curr / 10

    • 增加curr 1

    • 而curr可除以10,则curr:= curr / 10

    • ret [i]:= curr

    • 如果curr * 10 <= n,则设置curr:= curr * 10

    • 除此以外

    • 返回ret

    例子(C ++)

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
       public:
       vector<int> lexicalOrder(int n) {
          vector <int> ret(n);
          int curr = 1;
          for(int i = 0; i < n; i++){
             ret[i] = curr;
             if(curr * 10 <= n){
                curr*= 10;
             } else {
                if(curr>= n)curr /= 10;
                curr += 1;
                while(curr % 10 == 0)curr/=10;
             }
          }
          return ret;
       }
    };
       main(){
       Solution ob;
       print_vector(ob.lexicalOrder(20));
    }

    输入项

    20

    输出结果

    [1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 3, 4, 5, 6, 7, 8, 9, ]