C++ 中的字典序数字
c++server side programmingprogramming
假设我们有一个整数 n。我们需要按字典序返回 1 到 n 的数字。例如,当给定 13 时,输出将是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9]。
为了解决这个问题,我们将遵循以下步骤 −
定义一个大小为 n 的数组 ret
curr := 1
for i in range 0 to n – 1
ret[i] := curr
如果 curr * 10 <= n,则设置 curr := curr * 10
否则
如果 curr >= n,则 curr := curr / 10
将 curr 增加 1
当 curr 能被 10 整除时,curr := curr / 10
return 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, ]