leetcode400. 第 N 位数字

该博客讨论了一个中等难度的编程问题,即在无限的整数序列中找到第N位数字。给出的解决方案涉及将序列分段,并确定目标数字处于哪一段以及该段内的位置,然后转换为对应的数值和位数,最终返回该位上的数字。示例展示了如何找到第3位和第11位数字的方法。
摘要由CSDN通过智能技术生成

400. 第 N 位数字

难度中等181

在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 位数字。

注意:n 是正数且在 32 位整数范围内(n < 231)。

示例 1:

输入:3
输出:3

示例 2:

输入:11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。

题目描述如上。

执行结果:

通过

显示详情

添加备注

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户

内存消耗:6.2 MB, 在所有 C++ 提交中击败了5.42%的用户

通过测试用例:71 / 71

做题思路要清晰,不要被情绪打扰了。

class Solution {
public:
    int getnum(int num,int pos)//输出数字num的第pos位
    {
        string str = to_string(num);
        if(pos > str.size())
            return 0;
        return str[pos - 1] - '0';
    }
    int findNthDigit(int n) {
        vector<long> v;
        v.push_back(0);
        v.push_back(9);
        for(int i = 1;i<=10;++i)
            v.push_back(v.back() + 9*pow(10,i)*(i+1));
        auto iter = v.begin();
        for(;iter != v.end();++iter)
        {
            if(*iter >= n)
                break;
        }
        if(*iter == n)  return 9;if(*iter+1 == n) return 0;
        int pos = iter - v.begin();//目标是几位数
        int num = (n - *(iter-1));
        int bit = num % pos;//第几位
        num /= pos;
        num += pow(10,pos - 1);//当前到了 哪个数字
        if(bit == 0)
        {
            bit = pos;
            num--;
        }
        cout<<num<<"  "<<bit<<endl;
        return getnum(num,bit);
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值