zoukankan      html  css  js  c++  java
  • LeetCode 400. Nth Digit

    Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...

    Note:
    n is positive and will fit within the range of a 32-bit signed integer (n < 231).

    Example 1:

    Input:
    3
    
    Output:
    3
    

    Example 2:

    Input:
    11
    
    Output:
    0
    
    Explanation:
    The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10.

    题目标签:Math

      题目给了我们一个 number n,让我们找到 第n个 digit。

      首先来看一下规律:

           start - range    len

    number  1 - 9                            1 digit

          10 - 99                        2 digits

          100 - 999                    3 digits

          ...

      想法是,首先我们要找到 第n个 digit 是在哪一个 range 里的,然后通过计算找出digit。

      我们从1 - 9 开始,这里有 9 个digits,如果 n 大于 9,那么digit 肯定在更大的 range 里,继续loop。

      我们需要初始 len = 1; range = 9; start = 1;

      len 是一个个的增加;

      range 是 10倍的增加, 1-9 是 9个; 10 - 99 是 90个;100 - 999 是 900个 ... 

      start 也是 10倍的增加,1, 10, 100 ... 

      当我们找到具体在哪一个 range 里之后,可以利用 (n-1) / len + start 来找到具体的 number;

      在利用 (n-1) % len 来找到具体的 digit。

      

    Java Solution:

    Runtime beats 91.87% 

    完成日期:06/16/2017

    关键词:math

    关键点:用 / 来找到number;用 % 来找到 digit

     1 class Solution 
     2 {
     3     public int findNthDigit(int n) 
     4     {
     5         // initial vars
     6         long len = 1; 
     7         long range = 9;
     8         long start = 1;
     9         
    10         while(n > (len * range)) // find n is in which range
    11         {
    12             n = n - (int)len * (int)range;  // minus the current total range digits
    13             // move to next range
    14             len++;
    15             range *= 10;
    16             start *= 10;
    17         }
    18         
    19         // now is in the correct range
    20         start = start + (n-1) / len;    // find the number
    21         String num = "" + start;
    22         int d = num.charAt( (n-1) % (int)len ) - '0';
    23         
    24         return d;
    25     }
    26 }

    参考资料:http://www.cnblogs.com/grandyang/p/5891871.html

    LeetCode 题目列表 - LeetCode Questions List

    题目来源:https://leetcode.com/

  • 相关阅读:
    Android架构初探
    TinyPNG---一个压缩PNG的神站
    Android添加全屏启动画面
    如何唯一的标识一台Android设备?
    获取Android设备唯一标识码
    Android系统资源图标android.R.drawable
    Android中使用adb访问SQLite的方法
    Java 对字符串数据进行MD5/SHA1哈希散列运算
    关于Android中EditText自动获取焦点并弹出键盘的相关设置
    EditText自动换行显示内容
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/8420732.html
Copyright © 2011-2022 走看看