สมมติว่าเรามีจำนวนเต็ม 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, ]