zoukankan      html  css  js  c++  java
  • LeetCode Lexicographical Numbers

    原题链接在这里:https://leetcode.com/problems/lexicographical-numbers/description/

    题目:

    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.

    题解:

    从cur=1开始加入res中,下个数有三种情况:

    第一种, cur*10 <= n, 就把cur 乘以 10.

    第二种, cur 末位不是9 并且 cur+1<=n的情况下, cur++.

    第三种, 末位已经等于9, 或者cur现在增加到n, 此时把cur调整到前一位不为9的level.

    Time Complexity: O(n). Space: O(1).

    AC Java: 

     1 class Solution {
     2     public List<Integer> lexicalOrder(int n) {
     3         List<Integer> res = new ArrayList<Integer>();
     4         int cur = 1;
     5         for(int i = 0; i<n; i++){
     6             res.add(cur);
     7             if(cur*10 <= n){
     8                 cur *= 10;
     9             }else if(cur%10!=9 && cur<n){
    10                 cur++;
    11             }else{
    12                 while((cur/10)%10 == 9){
    13                     cur /= 10;
    14                 }
    15                 cur = cur/10+1;
    16             }
    17         }
    18         return res;
    19     }
    20 }
  • 相关阅读:
    ant design pro梳理
    JSON.stringify()
    数组小细节
    js this细节
    策略模式解决if-else过多
    使用useState的赋值函数异步更新问题
    Hook
    React Api
    Intent
    树的非递归遍历
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/8151766.html
Copyright © 2011-2022 走看看