题解 | #第几位数#

数字序列中某一位的数字

http://www.nowcoder.com/practice/29311ff7404d44e0b07077f4201418f5

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    public int findNthDigit (int n) {
        
        //10      180+10     2700+180+10
        //[0,10)  [10,100)   [100,1000)
        int bit = 1 ;//位数
        long low = 0 ;//下限
        long high = 10 ;//上限
        //找n在哪个区间(每个区间都有若干位数,当n高于区间的位数,就减去这些区间的位数
        //继续判断下一个区间
        while(n >= (high-low)*bit) {
            long count = (high-low)*bit;
            n-=count ;
            bit++ ;
            low=(low==0?10:low*10) ;
            high *= 10 ;

        }
        //在区间low~high的第num位数(从0开始)
        long num = n / bit + low ;
        //在第num位数的第一个位置
        int bbit = n % bit ;
        
        int div = (int)(Math.pow(10.0,bit-bbit-1)) ;
        return (int)(num/div)%10 ;

    }
}

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

01-30 09:45
燕山大学 Java
喵_coding:这种直接跑就完事了 哪有毕业了才签合同 任何offer和三方都没有的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务