Sword44——数字序列中某一位的数字

本文详细介绍了如何通过迭代取余求整的方法找到数字序列中某一位的数字。首先确定数字处于的位数,然后计算该位数的起始位置和数字个数,接着在循环中不断更新这些值,直到找到目标数字的位置。最后通过取余运算确定数字在该位的哪一位上,返回对应的数字。这种方法适用于处理各种长度的数字序列。
摘要由CSDN通过智能技术生成

Sword44——数字序列中某一位的数字

方法1——迭代取余求整

  • 思路:
    • 明确思路,主要分为三步骤
      • 首先需要找到n是处于几位数中
      • 接着找到n处于几位数的哪位数中
      • 之后找到n处于哪位树的哪一位中
  • 特殊情况与临界分析:无
  • 终止条件:无
  • 步骤:
    • 定义当前位数,从个位数1开始
    • 定义当前位数对应的起始位、当前位数的所有数字个数所占的位数,防溢出使用long类型
    • 循环条件:n大于当前位数的所有数字个数
    • while循环
      • n减去当前位数的所有数字个数所占位数
      • 对应位数加1
      • 对应位数起始位置乘以10
      • 对应位数的所有数字个数所占位数,起始位置 * 9(当前位数的所有数字个数) * digit
    • 因为下标从0开始,因此使用start加上(n-1除以digit为向后移动数字的个数)即为n处于的当前位数的数字
    • 使用n - 1对digit取余,即为n位于该数字的哪一位上
    • 返回该数字的该位的数字即可
    public int findNthDigit(int n) {
        // 定义当前位数,从1位数开始
        int digit = 1;
        // 定义当前位数的起始位、当前位数的所有数字所占的位数
        long start = 1;
        long count = 9;
        // while循环
        while (n > count) {
            // n减去count
            n -= count;
            // 位数加1
            digit += 1;
            // 起始位置乘以10
            start *= 10;
            // 当前位数所有数字所占位数
            count = start * 9 * digit;
        }
        // 找到n在当前位数中的具体哪一位数字
        long num = start + (n - 1) / digit;
        // 找到n在哪一位数字的哪一位上
        int res = (n - 1) % digit;
        // 返回该个数字的该位上的数字,减去字符0将隐式转为int类型
        return Long.toString(num).charAt(res) - '0';
    }

方法1——迭代取余求整

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值