Leetcode 400 第N位数字

题目

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位数字。

解题思路

  [1, 9] 的数字位数都是1,[10, 99] 的数字位数都是2…以此类推,可以先确定数字的位数。减去前面所有的位数和,再根据余值计算具体的数,然后在数上取答案。变量名用的比较乱,具体看代码注释吧。

代码
class Solution {
    public int findNthDigit(int n) {
        long tmp = 9;
        int nowNumber = 0, cnt = 1;  //nowNumber表示第N位所在的数
        while (n - cnt * tmp > 0) {
            n -= cnt * tmp;
            nowNumber += tmp;
            tmp *= 10;
            cnt++;
        }
      
        int res = n / cnt; // 这里表示在所有的cnt位数中,数的位置
        nowNumber += res;
        if (n % cnt != 0) {  //判断是否在某个数的末尾,不在末尾的话就+1
            String nextNumber = String.valueOf(nowNumber + 1);
            n -= cnt * res;
            return nextNumber.charAt(n - 1) - '0';
        } else {
            return nowNumber % 10;
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值