C++ 中的詞法順序數字


假設我們有一個整數 n。我們必須按詞法順序返回 1 到 n。例如,當給定 13 時,輸出將為 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9]。

為解決此問題,我們將遵循以下步驟 -

  • 定義一個大小為 n 的陣列 ret

  • curr := 1

  • 對於範圍 0 到 n – 1 中的 i

    • ret[i] := curr

    • 如果 curr * 10 <= n,則設定 curr := curr * 10

    • 否則

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

      • curr 增加 1

      • 當 curr 可被 10 整除時,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, ]

更新時間:02-05-2020

2K+ 瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.