leetcode第N个数字

1.数学法

https://blog.csdn.net/qq_38196982/article/details/104962098

此题和上一题不同的是正数序列不是从0开始,而是从1开始,且起始位置是第1位,

我们可以在序列的前面添加一个0,这样每一个区间的处理都一样了

如0-9  是10个数,10-19是10个数,如果不加0,则最初只有9个数

其他和上一题一样

代码如下:

class Solution {
public:
    int findNthDigit(int n) {
        //在正数序列前添加一个0,这样所有的处理都统一   0-9是10个数,10-19也是10个数
       int k=0,num=0;
       if(n<10)
         return n;
        while(n>0)
        {
         num=n;
         n=n-9*pow(10,k)*(k+1);
         k++;
        }

        int a=(num-1)/k;//对应的是添加的0
        int b=(num-1)%k;
        a=a+pow(10,k-1);
        string s=to_string(a);
        return int(s[b]-'0');
    }
};

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值