400. Nth Digit

这个EASY难度的题怎么感觉比H的还难,做了好久。。

呃啊。。我生 气 啦。。
image

1 digit:
1~9 总共19个
2 digits:
10~99 总共2
90个
3 digits:
100~999 总共3*900个

所以就是先定位哪个大区间,再从那个区间开始找确切位置。。

public class Solution 
{
    public int findNthDigit(int n) 
    {  
        int digits = 1;  
        long count = 9;  
        int pow = 1;  
  
        while (n > digits * count) 
        {  
            n -= digits * count;  
            digits++;  
            count *= 10;  
            pow *= 10;  
        }  
  
        pow += (n - 1) / digits;  
        String s = Integer.toString(pow);  
        return s.charAt((n - 1) % digits) - '0';  
    } 
}

EASY的难度用了这么久,我一定是病了。

image



二刷依然做得很傻逼。

首先还是要先定位是几位数。

然后确定几位数里的哪一个数。

用前一个大区间 + 当前数 = 精确定位的数字

最后精确定位的数字中要求的那一位。。

public class Solution {
    public int findNthDigit(int n) {
        /*
        1 digit:  
        1~9 总共1*9个  
        2 digits:  
        10~99 总共2*90个  
        3 digits:  
        100~999 总共3*900个
        
        */
        int digits = 1;
        long power = 9;
        while (digits * power < n) {
            n -= (int)digits * power;
            digits++;
            power *= 10;
        }
        int whichOne = (n - 1) / digits;
        int left = (n - 1) % digits;
        int num = (int)Math.pow(10,digits-1) + whichOne;
        return Integer.toString(num).toCharArray()[left] - '0';
        
        
    }
}
posted @ 2016-11-06 12:28  哇呀呀..生气啦~  阅读(105)  评论(0)    收藏  举报