[剑指Offer]- 数字序列中某一位的数字

    xiaoxiao2025-05-15  6

    题目描述

    数字以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)); } /** * 无脑比对 * 0-9 位数求和-->10 10-20 位数求和--->20 如求第11位 11是二位数 只有理论上应该是10+1 但是目前10+2 * 时间复杂O(n) * * @param num * @return */ 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++; //计算当前n的位数 } if (sum > temp) { sum = sum - 1; break; } sum += index2; index2 = 0; } return num.charAt(sum); } }
    附录

    该题源码在我的 ?Github 上面!

    最新回复(0)