Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวเลขพจนานุกรมในภาษา C++


สมมติว่าเรามีจำนวนเต็ม n เราต้องคืนค่า 1 ถึง n ตามลำดับศัพท์ ตัวอย่างเช่น เมื่อให้ 13 ผลลัพธ์จะเป็น [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดหนึ่งอาร์เรย์ ret ขนาด n

  • สกุลเงิน :=1

  • สำหรับฉันอยู่ในช่วง 0 ถึง n – 1

    • ret[i] :=curr

    • ถ้า curr * 10 <=n ให้ตั้งค่า curr :=curr * 10

    • อย่างอื่น

      • ถ้า curr>=n แล้ว curr :=curr / 10

      • เพิ่มเงินอีก 1

      • ในขณะที่ curr หารด้วย 10 ลงตัวแล้ว curr :=curr / 10

  • รีเทิร์น

ตัวอย่าง(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, ]