zoukankan      html  css  js  c++  java
  • [LeetCode] Nth Digit

    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.
    找出1~n有序数字中的第n位。
    首先需要确定的是1-9之间有9个数。10-99之间有90个数,100-999之间有900个数。
    如果要找出有序数中第n个数,需要判断这个第n位的区间范围,实在1-9之间还是在10-99之间。
    所以需要一个base和digits来确定n属于的大致区间及所在区间的整数位数。
    step1:确定n所在整数区间的整数位数,这时n就表示从该digits整数位数开始的第n位。
    step2:计算第n个数字是什么。
    step3:这个数字中的第index位。也就是题目要求的第n位值。
    class Solution {
    public:
        int findNthDigit(int n) {
            // 1. calc how many digits the number has.
            long base = 9, digits = 1;
            while (n - base * digits > 0) {
                n -= base * digits;
                base *= 10;
                digits++;
            }
            
            // 2. calc what the number is.
            int index = n % digits;
            if (index == 0)
                index = digits;
            long num = 1;
            for (int i = 1; i < digits; i++)
                num *= 10;
            num += (index == digits) ? n / digits - 1 : n / digits;
            
            // 3. find out which digit in the number.
            for (int i = index; i < digits; i++)
                num /= 10;
            return num % 10;
        }
    };
    // 3 ms
  • 相关阅读:
    循环逗号分割数组!
    只是想好好学习一下!
    html元素水平垂直居中
    闭包知识点--笔记
    20160314
    从零开始做运维-零
    Nginx 和 CodeIgniter
    安装PIL库
    init
    NutUI3 多端实践之路
  • 原文地址:https://www.cnblogs.com/immjc/p/7994218.html
Copyright © 2011-2022 走看看