欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【LeetCode笔记】剑指 Offer 44. 数字序列中某一位的数字(Java、偏数学)

发布时间:2024/7/23 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【LeetCode笔记】剑指 Offer 44. 数字序列中某一位的数字(Java、偏数学) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 题目描述
  • 思路 && 代码

题目描述

  • 比较偏数学的一道题。。众所周知这类题代码量都不大,但是就是难想= =

思路 && 代码

  • 这篇题解写得很好~
  • 建议还是直接看上面的题解(结合图更好理解),这边我只是写上一点自己的笔记
  • 主要分为三个步骤:寻找对应数字的位数、寻找对应数字、寻找对应数字的最终位
  • 步骤一:通过公式 count = 9 * digit * start 来循环寻找
  • 步骤二:(n - 1) 是因为要向下取,结合计算机中除法直接向下取整的特性
  • 步骤三:(n - 1) 是因为数字的首位为第 0位
  • 总的来说,感觉是挺偏数学规律的一道题。。
class Solution {public int findNthDigit(int n) {// 0. init// 位数int digit = 1;// 当前位数对应最小值,比如 1 - 0, 2 - 10, 3 - 100long start = 1;// 当前位数存储的所有值的位数和: count = 9 * digit * startlong count = 9;// 1. 寻找 digitwhile(n > count) {n -= count;digit++;start *= 10;count = digit * start * 9;}// 2. 找到对应的数字,比如 199:所求数字在 start 的后 (n - 1) / digit 位long num = start + (n - 1) / digit;// 3. 找到对应数字的最终位return Long.toString(num).charAt((n - 1) % digit) - '0';} }

总结

以上是生活随笔为你收集整理的【LeetCode笔记】剑指 Offer 44. 数字序列中某一位的数字(Java、偏数学)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。