zoukankan      html  css  js  c++  java
  • Leetcode 400.第n个数

    第n个数

    在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 个数字。

    注意:
    是正数且在32为整形范围内 ( n < 231)

    示例 1:

    输入:

    3

     

    输出:

    3

    示例 2:

    输入:

    11

     

    输出:

    0

     

    说明:

    11个数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是0,它是10的一部分。

     1 public class Solution {
     2     /**
     3      * 这里是找第n个数字(这里的数和数字有区别,数字可以理解为将所有数拼合成一个字符串后的第n为对应的数字(0-9))
     4      * 这里首先分析一下位数和规律
     5      * 个位数:1-9,一共9个,共计9个数字
     6      * 2位数:10-99,一共90个,共计180个数字
     7      * 3位数:100-999,一共900个,共计2700个数字
     8      * 4位数,1000-9999,一共9000个,共计36000个数字
     9      * 以此类推,
    10      * 这样我们就可以首先定位到是哪个数,再找到其对应的数字
    11      * */
    12 
    13     public int findNthDigit(int n) {
    14         //小心溢出
    15         int digitType = 1;
    16         long digitNum = 9;
    17         //定位到是几位数
    18         while(n > digitNum*digitType){
    19             n -= (int) digitNum*digitType ;
    20             digitType++;
    21             digitNum*=10;
    22         }
    23         //定位到是这些几位数里面的第几个的第几位
    24         int indexInSubRange = (n -1) / digitType;
    25         int indexInNum = (n -1) % digitType;
    26         //还原数字
    27         int num = (int)Math.pow(10,digitType - 1) + indexInSubRange ;
    28         int result = Integer.parseInt((""+num).charAt(indexInNum)+"");
    29         return result;
    30     }
    31 }
  • 相关阅读:
    大数加法、乘法实现的简单版本
    hdu 4027 Can you answer these queries?
    zoj 1610 Count the Colors
    2018 徐州赛区网赛 G. Trace
    1495 中国好区间 尺取法
    LA 3938 动态最大连续区间 线段树
    51nod 1275 连续子段的差异
    caioj 1172 poj 2823 单调队列过渡题
    数据结构和算法题
    一个通用分页类
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10235405.html
Copyright © 2011-2022 走看看