剑指Offer 43. 1~n 整数中 1 出现的次数

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

题目链接: 剑指Offer 43. 1~n 整数中 1 出现的次数

题目描述:

解法思路:

代码:

func countDigitOne(n int) int {
	//思路
	if n == 0 {
		return 0
	}
	//求出该数的各个位上的数字,保存到nums中
	var nums []int
	tmp := n
	for tmp != 0 {
		a := tmp % 10
		nums = append(nums, a)
		tmp /= 10
	}
	var l, r, t, res int

	for i := len(nums) - 1; i >= 0; i-- {
		l = 0 //表示左边
		r = 0 //右边
		t = 1
		for j := len(nums) - 1; j > i; j-- {
			l = l*10 + nums[j]
		}
		for j := i - 1; j >= 0; j-- {
			r = r*10 + nums[j]
			t *= 10
		}
		res += l * t
		if nums[i] == 1 {
			res += r + 1
		} else if nums[i] > 1 {
			res += t
		}
	}
	return res
}