标签:10 Digit curr mut next i64 Nth let LeetCode
Given an integer n, return the nth digit of the infinite integer sequence [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …].
Example 1:
Input: n = 3
Output: 3
Example 2:
Input: n = 11
Output: 0
Explanation: The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … is a 0, which is part of the number 10.
Constraints:
- 1 <= n <= 231 - 1
注意每次生成新的范围时, curr=next+1
, 如果不+1 那就会导致范围有交叠
impl Solution {
pub fn find_nth_digit(n: i32) -> i32 {
if n < 10 {
return n;
}
let mut i = 0;
let mut curr = 0_i64;
let mut next = 9_i64;
while next < n as i64 {
i += 1;
curr = next + 1;
next += 9 * 10_i64.pow(i as u32) * (i + 1);
}
let start = 10_i64.pow(i as u32);
let offset = (n as i64 - curr) / (i + 1);
let index = (n as i64 - curr) % (i + 1);
(start + offset)
.to_string()
.chars()
.nth(index as usize)
.unwrap()
.to_string()
.parse::<i32>()
.unwrap()
}
}
标签:10,Digit,curr,mut,next,i64,Nth,let,LeetCode 来源: https://blog.csdn.net/wangjun861205/article/details/121258857
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。