题目描述
数字以01234567891011121314…的格式排列。在这个序列中,第5位(从0开始计)是5,第13位是1,第19位是4。求任意第n为对应的数字。
这是个数学规律题
解题思路
每次枚举一个数字的时候,求出数字是几位数,并把该数字的位数和前面所有的数字的位数累加 -当和大于该数,则第n位数一定在这里面
算法图解
参考代码:
package offer
;
public class Offer44 {
public static void main(String
[] args
) {
String num
= "01234567891011121314151617181920";
System
.out
.println(findNumber(num
, 19));
}
static char findNumber(String num
, int n
) {
int temp
= n
;
int index2
= 1;
int sum
= 1;
for (int i
= 0; i
< temp
; i
++) {
while (i
> 0) {
i
= i
/ 10;
index2
++;
}
if (sum
> temp
) {
sum
= sum
- 1;
break;
}
sum
+= index2
;
index2
= 0;
}
return num
.charAt(sum
);
}
}
附录
该题源码在我的 ?Github 上面!