• LeetCode——Nth Digit


    Question

    Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...

    Note:
    n is positive and will fit within the range of a 32-bit signed integer (n < 231).

    Example 1:

    Input:
    3
    
    Output:
    3
    

    Example 2:

    Input:
    11
    
    Output:
    0
    
    Explanation:
    The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10
    

    Solution

    就是统计位数,然后注意越界的问题,所以应该用long.

    Code

    class Solution {
    public:
        int findNthDigit(int n) {
            if (n < 10)
                return n;
            int i = 1;
            long pre = 0;
            while (1) {
                long value = i * 9 * pow(10, i - 1);
                if (n > value) {
                    pre += value;
                    i++;
                }
                else {
                    break;
                }
            }
            long remain = n - pre;
            long y = remain / i;
            long z = remain % i;
            i--;
            long start;
            if (z > 0)
                start = pow(10, i) + y;
            else
                start = pow(10, i) + y - 1;
            stringstream ss;
            ss << start;
            string str;
            ss >> str;
            if (z > 0)
                return (str[z - 1]) - 48;
            else
                return (str[str.length() - 1]) - 48;
        }
    };
    
  • 相关阅读:
    MyBatis 自动关闭 session
    Sublime相关操作及配置
    CentOS yum换源并配置SSH
    SpringSecurity认证流程
    ES模块化的导入和导出
    Promise学习
    axios的使用
    SpringSecurity注解的使用
    Webpack笔记
    JAVA工具类
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7588161.html
Copyright © 2020-2023  润新知