剑指offer-刷题笔记-简单题-JZ44 数字序列中某一位的数字

本文解析了如何使用C++实现查找数字序列中特定位置的数字,通过迭代计算范围和位数,找出给定整数n对应的字符串数组位置,最后返回相应字符的数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剑指offer-刷题笔记-简单题-JZ44 数字序列中某一位的数字

第一遍没有写出来

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int findNthDigit(int n) {
        
        long long start = 1, count = 9;//0~9 10~99 100~999
        int digCount = 1;//字符位数
        //注意这里0~9 10~99 100~999是字符数组的范围,不是输入n的范围,count计算的就是n的对应范围,
        // 0~9    n 0~9
        //10~99   n 10~280
        //100~999 n 280~
        while(n > count)
        {
            n -= count;
            digCount++;
            start *= 10;
            count = start * digCount * 9;//
        }
        int num = start + (n - 1) / digCount;//对应字符数组值 
        string s = to_string(num);
        int result = s[(n - 1) % digCount] - '0';
        return result;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值