386. Lexicographical Numbers

来源:互联网 发布:淘宝网首页登录电脑版 编辑:程序博客网 时间:2024/06/02 19:41

Problem

Given an integer n, return 1 - n in lexicographical order.

For example, given 13, return:[1,10,11,12,13,2,3,4,5,6,7,8,9].

Please optimize your algorithm to use less time and space. The input size may be as large as 5,000,000.

Code

class Solution {public:    vector<int> lexicalOrder(int n) {        vector<int> res;        if(n <= 9) {          for(int i = 1; i <= n; ++i)            res.push_back(i);        } else {          //如果大于9的时候就按照顺序 递归枚举          for(int i = 1; i <= 9; ++i) {            res.push_back(i);            dfs(res, i, n);          }        }        return res;    }    void dfs(vector<int>& res, int start, int n) {        int next_num = 10 * start;        if(next_num <= n) {          //计算差值 ,如果差值超过9那么 就从1-9继续下一层的搜索          int diff_num = n - next_num;          diff_num = diff_num > 9 ? 9 : diff_num;          for(int i = 0; i <= diff_num; ++i) {            int tmp_num = next_num + i;            res.push_back(tmp_num);            dfs(res, tmp_num, n);          }        }    }};
0 0
原创粉丝点击