题解 | #数字序列中某一位的数字#

数字序列中某一位的数字

https://www.nowcoder.com/practice/29311ff7404d44e0b07077f4201418f5

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @return int整型
     */
    int findNthDigit(int n) {
        // write code here
        if(n < 10) return n;
        int num_len[10];
        int n_len = 9;
        // 长1的数有10个,长2的90个,长3的900个...先判断n落在长度为多少的区间
        for(int i = 1; i<9 ; i++){
            if(i == 1) num_len[i] = 10;
            else{
                num_len[i] = num_len[i-1] + i * 9 * (int)pow(10, i-1);
            }
            if(n < num_len[i]){
                n_len = i;
                break;
            }
        }
        //计算第几个数字,减去上一个长度数字的累计个数
        int cnt = (n - num_len[n_len - 1]) / n_len;
        //计算在这个数字的偏置位数
        int bias = (n - num_len[n_len - 1]) % n_len;
        int final_num = (int)pow(10, n_len-1) + cnt;
        //不能直接返回string的下标强制转换成int的结果,否则会返回字符的数字编码,需要减去字符0
        return to_string(final_num)[bias] - '0';
    }
};

#剑指offer#
全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务