剑指Offer

发布时间 2023-09-07 16:50:16作者: 小星code

题目链接:

题目描述:

解法思路:

代码:

func findNthDigit(n int) int {

    // 1、确定是几位数( -10-90-900-9000等)
    // 2、确定是几位数的第几位数(求第n位数是属于哪一个数的)
    // 3、确定是 属于那个数的第几位

    digit,digitNum,count := 1,1,9  //digit 表示是几位数;digitNum 表示n位数的数量级(与count相乘得到n位数的数量)
     // 1、确定是几位数( -10-90-900-9000等)
    for n > count{
        n -= count
        digit++
        digitNum *= 10
        count = 9*digit*digitNum
    }
    // 2、确定是几位数的第几位数(求第n位数是属于哪一个数的)
    num := digitNum + (n-1)/digit

    // 3、确定第n位是
    index := (n-1)%digit
    //return getDigit(num, index, digit)
    // 或者 (利用z)
    return int(strconv.Itoa(num)[index]-'0')
}
//获取整数n的第index位,如871的第0位为8
func getDigit(n, index, digit int) int {
    k := digit - index - 1
	for k > 0 {
		n = n / 10
        k--
	}
	return n % 10
}