LeetCode—386. Lexicographical Numbers

来源:互联网 发布:linux oracle多实例 编辑:程序博客网 时间:2024/05/21 07:06

386. Lexicographical Numbers

  • Total Accepted: 1486
  • Total Submissions: 5876
  • Difficulty: Medium

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.

C++代码运行时间结果是720ms,25个testcase。估计是我算法太慢了,先贴出来吧。

class Solution {public:vector<int> lexicalOrder(int n) {vector<int> result;int Fir_num = 1, power = 0, num = 0, limits = 0;while (1){num = Fir_num*pow(10, power);limits = (Fir_num + 1)*pow(10, power);while (num < n){result.push_back(num);if (result.size() == n)return result;power++;num = Fir_num*pow(10, power);}if (num == n){result.push_back(num);if (result.size() == n)return result;}power--;num = Fir_num*pow(10, power) + 1;limits = (Fir_num + 1)*pow(10, power);while (num < n&&num<limits){if (insert(result, num, limits, n, 1))return result;if (num == n&&n % 10 != 0)if (insert(result, num, limits, n, INT_MAX))return result;}if (num == n&&n % 10 != 0)if (insert(result, num, limits, n, INT_MAX))return result;if (num > n || num == limits){power = 0;Fir_num++;}}return result;}int insert(vector<int>& result, int &num, int &limits, int &n,int onlyonce){int tmp = 0, tmp1 = 0, tmp2 = 0, length = 0;result.push_back(num);if (result.size() == n)return 1;while (num < limits&&onlyonce){onlyonce--;tmp = num / 10;num++;if ((int)(num / 10) != tmp&&num < limits){tmp1 = tmp;tmp2 = num / 10;length = 0;while (tmp1 != tmp2){length++;tmp1 /= 10;tmp2 /= 10;}while (length){if (num / pow(10, length) < n){result.push_back(num / pow(10, length));if (result.size() == n)return 1;}tmp1 /= 10;tmp2 /= 10;length--;}}}return 0;}};


0 0
原创粉丝点击