zoukankan      html  css  js  c++  java
  • 剑指 Offer 68 数字序列中某一位的数字

    数字序列中某一位的数字

    数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。

    请写一个函数,求任意第n位对应的数字。

    思路:以第15位数字2为例(2隶属与12,两位数,位于12从左侧以0号开始下标为1的位置) 步骤1:首先确定该数字是属于几位数的; 如果是一位数,n<9;如果是两位数,n<9+90*2=189; 说明是两位数。 步骤2:确定该数字属于哪个数。10+(15-10)/2= 12。 步骤3:确定是该数中哪一位。

    func findNthDigit(n int) int {
        if n < 10 {
            return n
        }
        digits := 1
        for {
            nums := count(digits)
            if n > digits*nums {
                n -= digits * nums
                digits++
            } else {
                preCount := n / digits    //目标数前有多少个digits位数
                index := n - preCount*digits //第几位
                t := int(math.Pow(10, float64(digits-1))) + t
                return getDigit(t, index, digits)
            }
        }
    }
    
    //统计n位数有多少个,如3位数有900个,1000-100=900
    func count(n int) int {
        if n == 1 {
            return 10
        }
        return int(math.Pow(10, float64(n)) - math.Pow(10, float64(n-1)))
    }
    
    //获取整数n的第index位,如871的第0位为8
    func getDigit(n, index, amount int) int {
        res := 0
        for index < amount {
            res = n - n/10*10
            n = n / 10
            index++
        }
        return res
    }
  • 相关阅读:
    Java中的Stream流
    JDK1.8之后的新特性和新接口
    IOS6和IOS7的屏幕适配问题
    OC特有语法-分类(category)
    UIApplication的作用
    IO中手机旋转事件的传递
    代码,显示IPhone剩余磁盘空间
    iOS程序的加载过程
    TableView数据源方法的执行顺序
    多线程之线程死锁
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/14642857.html
Copyright © 2011-2022 走看看