承德市网站建设,网站都是用什么编写的,电脑上怎么做网站,西安企业电话参考资料 剑指 Offer 44. 数字序列中某一位的数字 中等 351 相关企业 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中#xff0c;第5位#xff08;从下标0开始计数#xff09;是5#xff0c;第13位是1#xff0c;第19位是4#xff0c;等等。…参考资料 剑指 Offer 44. 数字序列中某一位的数字 中等 351 相关企业 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中第5位从下标0开始计数是5第13位是1第19位是4等等。
请写一个函数求任意第n位对应的数字。
示例 1
输入n 3 输出3 示例 2
输入n 11 输出0
限制
0 n 2^31
思路 其实并没有什么特别的……就是数数边数边删见下面代码的while循环直到最后落在某个区间这就能确定目标所在的位置是 几位数的群体(即退出while循环后的digit, 如果digit2,那么说明落在10-99之间) 再在这个群体里定位是哪一个数字见int num那一行。比如27 进一步定位是这个数字的哪一位见最后的return语句。比如第一位即7 注意从0开始数也就是0就是第0位1就是第1位。
class Solution {public int findNthDigit(int n) {int digit1;int count9;// int start1;while(ncount){n-count;digit;start*10;count digit*start*9;//10-99, 100-999, }int num start(n-1)/digit;return Long.toString(num).charAt((n-1)%digit)-0;// !! 注意这里取出第((n-1)%digit)个字符之后怎么将它转化为整数再返回}// 参考资料下面是LeetCode,K神的代码可以看到大神把start,count这些增长比较快的数设置成Long型注意最后将某个字符转成数字的代码注意这代码已经将n0的情况考虑在内此时不进入while循环(n-1)/digit-1, so num0.public int findNthDigit2(int n) {int digit 1;long start 1;long count 9;while (n count) { // 1.n - count;digit 1;start * 10;count digit * start * 9;}long num start (n - 1) / digit; // 2.return Long.toString(num).charAt((n - 1) % digit) - 0; // 3.}}