68.第2のアルゴリズムは、簡単かつ迅速Nデジタルであります

整数1、2、3、4、5、6、7、8、9、10、11、...、第n桁に見出さの無限配列です。

注:
N-及び整形(N <231)の32の範囲の正数です。

例1:

入力:
3

出力:
3
例2:

入力:
11

出力:
0

説明:
最初の11桁...、それは部分10で、シーケンス1 0、2、3、4、5、6、7、8、9、10、11です。

ソリューション:
 

func findNthDigit(_ n: Int) -> Int {
        var n = n
        var carry = 1
        var bits = 1
        while n > carry * bits * 9 {
            n -= carry * 9 * bits
            carry += 1
            bits *= 10
        }
        
        let num = (n - 1)/carry + bits
        let mol = ((carry - n % carry) % carry) + 1
        
        var dev = 1
        
        for _ in 0..<mol-1 {
            dev *= 10
        }
        
        return ((num % (dev * 10)) / dev)
        

    }

 

おすすめ

転載: blog.csdn.net/huanglinxiao/article/details/93159785