zoukankan      html  css  js  c++  java
  • [leetcode] 400. Nth Digit

    https://leetcode.com/contest/5/problems/nth-digit/

    刚开始看不懂题意,后来才理解是这个序列连起来的,看一下第几位是几。然后就是数,1位数几个,2位数几个,3位数几个,int范围2e10,所以处理到11位数差不多,仔细算一下可以更少,然后先找到是几位数,然后除以位数,找到这个数是多少,取余看是第几位,然后就可以了。我预处理每位的个数和开始的位置。

     1 class Solution {
     2 public:
     3    long long d[11];
     4 int b[11];
     5 int init(int n) {
     6     d[0] = 0;
     7     d[1] = 9;
     8     b[1] = 1;
     9     for (int i = 2; i < 11; i++) {
    10         d[i] = d[i - 1] * 10;
    11         b[i] = b[i - 1] * 10;
    12     }
    13     for (int i = 1; i < 11; i++) {
    14         d[i] = d[i] * i;
    15        // cout << d[i] << endl;
    16     }
    17     int i = 1;
    18     for (i = 1; i < 11; i++) {
    19         if(d[i] < n)
    20             n -= d[i];
    21         else break;
    22     }
    23     n--;
    24     int t1 = n / i, t2 = n % i;
    25     int k = b[i] + t1;
    26     stringstream ss; string s1;
    27     ss << k; s1 = ss.str();
    28     //cout << t1 << " asd " << t2 << endl;
    29     //cout << s1 << endl;
    30     //reverse(s1.begin(), s1.end());
    31     return s1[t2] - '0';
    32 
    33 }
    34  int findNthDigit(int n) {
    35         return init(n);
    36     }
    37 };
  • 相关阅读:
    SDN第三次作业
    SDN第二次上机作业
    SDN第二次作业
    JAVA小记
    算法笔记
    排序
    SDN期末作业
    SDN第五次上机作业
    SDN第四次上机作业
    SDN第四次作业
  • 原文地址:https://www.cnblogs.com/y119777/p/5882638.html
Copyright © 2011-2022 走看看