这是悦乐书的第215次更新,第228篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400)。找到无限整数序列的第n个数字1,2,3,4,5,6,7,8,9,10,11 ......例如:

输入:3
输出:3

输入:11
输出:0
说明:序列1,2,3,4,5,6,7,8,9,10,11 ......的第11位是0,它是数字10的一部分。

注意:n为正整数且符合32位有符号整数(n <2^31)的范围。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

直接使用for循环,从1开始累加字符串,返回第n-1个字符所表示的整数即可。但是此方法严重超时,不建议使用

public int findNthDigit(int n) {String str = "";for (int i=1; i<= n; i++) {str += i;}return Integer.parseInt(str.charAt(n-1)+"");
}

03 第二种解法

题目的意思是有一个以正整数(1,2,3,4,依次向后加1)为基础组成的序列(也可以理解为字符串),传入一个整数n,找出在该序列中的第n位数字。该序列含有以下规律:

  • 1-9,有9个一位数,当n小于等于9的时候,可以在里面找到值。

  • 10-99,有90个两位数,当n大于9且小于等于180+9=189时,可以在里面找到值。

  • 100-999,有900个三位数,当n大于189且小于900x3+189=2889时,可以在里面找到值。

我们可以将此问题分解为三个步骤:

  • 先计算该数字的位数,确定范围。

  • 找出该数字。

  • 确定是该数字中的第几位数。

例如:303

第一步,因为189<303<2889,所以我们要找的是一个三位数,303-189=114,此时n变成114。

第二步,我们要找的数变成了三位数中的第114位,那我们就可以计算出三位数中的第114位数是100+(114-1)/3=137。这里减1是因为在字符串中,索引是从0开始的,而我们的序列字符串是从1开始,所以要减1,你也可以从一开始就减1。

第三步,计算是137中的第几位数,(114-1)%3=2,也就是137的第2位(从0开始)数7,就是我们想要的结果。

在代码中我们使用long类型,预防溢出的风险。

public int findNthDigit2(int n) {long start = 1, count = 1, num = 9;while (n > num*count) {n -= num*count;count += 1;start *= 10;num *= 10;}start += (n-1)/count;String result = start+"";long index = (n-1)%count;return result.charAt((int)index)-'0';
}

04 小结

算法专题目前已连续日更超过两个月,算法题文章83+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

转载于:https://www.cnblogs.com/xiaochuan94/p/10188477.html

LeetCode算法题-Nth Digit(Java实现)相关推荐

  1. LeetCode算法题-Reverse Linked List(Java实现)

    这是悦乐书的第192次更新,第195篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第51题(顺位题号是206).反转单链表.例如: 输入:1-> 2-> 3- ...

  2. LeetCode算法题-Convert a Number to Hexadecimal(Java实现)

    这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...

  3. leetcode 用java_LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  4. LeetCode算法题-Minimum Depth of Binary Tree(Java实现)

    这是悦乐书的第168次更新,第170篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第27题(顺位题号是111).给定二叉树,找到它的最小深度.最小深度是沿从根节点到最近的 ...

  5. LeetCode算法题-Valid Palindrome II(Java实现)

    这是悦乐书的第287次更新,第304篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680).给定非空字符串s,最多可以删除一个字符. 判断它是否是回 ...

  6. LeetCode算法题-K-diff Pairs in an Array(Java实现)

    这是悦乐书的第254次更新,第267篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第121题(顺位题号是532).给定一个整数数组和一个整数k,您需要找到数组中唯一的k- ...

  7. LeetCode算法题-Jewels and Stones(Java实现)

    这是悦乐书的第313次更新,第334篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771).字符串J代表珠宝,S代表你拥有的石头.S中的每个字符都是 ...

  8. LeetCode算法题-Repeated String Match(Java实现)

    这是悦乐书的第289次更新,第307篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是686).给定两个字符串A和B,找到A必须重复的最小次数,使得B是 ...

  9. LeetCode算法题-Factorial Trailing Zeroes(Java实现)

    这是悦乐书的第183次更新,第185篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第42题(顺位题号是172).给定一个整数n,返回n!中的尾随零数.例如: 输入:3 输 ...

最新文章

  1. day16-筛选器以及Tab菜单示例
  2. Gym迎来首个完整环境文档,强化学习入门更加简单!
  3. CISSP备考系列之行政性管理[10-37]
  4. Cesium官方教程8-- 几何体和外观效果
  5. Ubuntu 8.10今起正式退休
  6. 计算机在线平方,完全平方数批量判断在线计算器_三贝计算网_23bei.com
  7. 找工作java还是python有用_你觉得学 Python 还是 Java 更好找工作?
  8. 函数计算助力高德地图平稳支撑亿级流量高峰
  9. high definition audio感叹号_【网抑云文案】你知道红色感叹号吧,我对着它聊了184天。...
  10. LaTeX(3)——LaTeX数学公式
  11. Kettle使用教程(一)—— 在MacOS系统中安装 Kettle
  12. dos盘启动计算机,u盘制作dos启动盘方法
  13. p值小于0.05拒绝还是接受_干货:关乎你的实验成败,0.05这个值不容小觑!
  14. ENVI FLAASH 大气校正方案问题汇总
  15. 小鑫の日常系列故事(一)——判断对错 (sdut oj)
  16. 软件单元黑盒测试,软件测试教学资源单元3 黑盒测试.doc
  17. Pr 复古胶片老电影回忆效果
  18. 【一神】10.15系统 oc引导 amd黑苹果 cpu识别错误/未知
  19. python中multiprocessing.Manger()支持类型
  20. Datawhale_大数据0期

热门文章

  1. Ubuntu下环境变量设置
  2. 【转】Itween 贝塞尔曲线(一)
  3. Android SERVICE后台服务进程的自启动和保持
  4. Web图形开发,SVG还是VML?
  5. 193. 一个不错的日历插件
  6. 从经济学与市场机制中,AI可以学到什么?| 美国三院院士迈克尔乔丹教授
  7. 从咨询公司学到的思考分析方法
  8. 【刷算法】判断链表是否有环以及返回入环节点
  9. Can't create table './store/#sql-b2c_1a.frm' (errno: 150)解决方法
  10. 什么是 Design System