NC291. 数字序列中某一位的数字
描述
示例1
输入:
0
输出:
0
示例2
输入:
2
输出:
2
示例3
输入:
10
输出:
1
示例4
输入:
13
输出:
1
C++ 解法, 执行用时: 2ms, 内存消耗: 396KB, 提交时间: 2021-11-29
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int findNthDigit(int n) { int digCont = 1; long long start = 1, count = 9; while(n > count) { n -= count; digCont += 1; start *= 10; count = start * digCont * 9; } int num = start + (n - 1) / digCont; string s = to_string(num); int result = s[(n - 1) % digCont] - '0'; return result; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 408KB, 提交时间: 2021-11-29
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int findNthDigit(int n) { // write code here if(n<0) { return 0; } long scope_start = 1; long scope_end = 9; long width = 1,num = n-1; while(num > scope_end*width) { num = num - scope_end*width; width++; scope_start *=10; scope_end *=10; } long number = scope_start + num/width; if(number >9) { for(long i = (width - (num%width) -1);i>0;i--) { number = number/10; } } return (int)number%10; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 424KB, 提交时间: 2021-11-13
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int findNthDigit(int n) { if (n <= 0) return 0; long width = 1, num = n - 1; long scope_start = 1, scope_len = 9; while (num > width * scope_len) { num -= width * scope_len; width++; scope_len *= 10; scope_start *= 10; } long number = scope_start + num / width; if (number > 9) { for (long i = (width - (num % width) - 1); i > 0; i--) { number /= 10; } } return int(number % 10); } };
Go 解法, 执行用时: 2ms, 内存消耗: 916KB, 提交时间: 2021-12-31
package main import "strconv" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ func findNthDigit( n int ) int { var dig = 1 var left, right = 0, 10 for n > (right - left) * dig { n -= (right - left) * dig dig++ left = right right = right * 10 } var num = n / dig + left var index = n % dig str := strconv.Itoa(num) return int([]byte(str)[index] - '0') }
Go 解法, 执行用时: 2ms, 内存消耗: 924KB, 提交时间: 2022-02-08
package main // import "fmt" import "strconv" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ func findNthDigit( n int ) int { // write code here var digit = 1 var left, right = 0, 10 for n > (right - left) * digit { n -= (right - left) * digit digit++ left, right = right, right * 10 } var num = n / digit + left var index = n % digit str := strconv.Itoa(num) return int([]byte(str)[index] - '0') }