Leetcode400

1 位数有 1*9
2 位数有 2*90
3 位数有 3 *90
n位数有 (n-1)*9* 10**n-1
确定位数:
确定数字:
确定数字的哪一位:

比如第13位 计算 13-9=4 ,从9开始偏移4个,但是偏移算的话需要从0,即有 3/2=1 10+1=11 确定是11, 3%2=1 确定下标为1
对应二位数字 10
10的第一位数字相对于来说是1 ,第二位数字是0,也就是在11的位置
可能说的不太清楚,代码如下:
public int findNthDigit(int n) {
//获取长度
int len =1;
//边界
long boder=9;
//转化为long
long N=n;
while(N> len*boder){ // 9 180 2700 算出位数
N=N-boder*len;
boder=boder*10;
len++;
}
int offset=(int)(N-1)/len; //算出偏移
int begin = (int) boder/9; //多少位
int mod =(int) (N-1)%len; //取余
String target = String.valueOf(begin+offset);
int ans =target.charAt(mod)-'0' ;
return ans;
}
写博客是为了让别人能明白,之后在是自己明白. 如果有不明白的地方欢迎加Q3378404370 讨论

浙公网安备 33010602011771号