标签:10 数字 Offer int 44 long ret 位数
剑指 Offer 44. 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
示例 1:
输入:n = 3 输出:3
示例 2:
输入:n = 11 输出:0
限制:
0 <= n < 2^31
解析:
10个1位数
90个2位数,90*2
900个3位数,900*2
依次类推
求第n个字符 所属的数字是几位数
然后求出这个数字
在求出相应的位数即可
class Solution { public: int findNthDigit(int n) { long long A[20]; long long N = (long long)n + 1; A[1] = 10; long long m = 90; for(int i = 2; i <= 9; i++) { A[i] = m * i; m *= 10; } int j = 1; while(N - A[j] >= 0) { N -= A[j]; j++; } if(j == 1) return N - 1; int a = N / j, b = N % j; long long k = (long long)pow(10, j - 1) + a; if(b == 0) k--; int ret; if(b == 0) { ret = k % 10; } else ret = k % (int)pow(10, j - b + 1) / (int)pow(10, j - b); return ret; } };
标签:10,数字,Offer,int,44,long,ret,位数 来源: https://www.cnblogs.com/WTSRUVF/p/16503348.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。