• 57. 数字序列中某一位的数字 (不懂)


    算法1

    以第15位数字1为例(1隶属与12,两位数,位于12从左侧以0号开始下标为0的位置)
    步骤1:首先确定该数字是属于几位数的;
    如果是一位数,n<9;如果是两位数,n<9+90X2=189;
    说明是两位数。
    因为是从0开始数数。0-9可以表示10个数字,从0开始数可以表示到9。10-99一共有90X2个数字,所以数到两位数能够数到9+90X2=189。
    步骤2:确定该数字属于哪个数。10+(15-10)/2= 12。
    步骤3:确定是该数中哪一位。15-10-(12-10)*2-1 = 0, 所以位于“12”的下标为0的位置,即数字1。

    以第1001位数字7为例
    步骤1:首先确定该数字是属于几位数的;
    如果是一位数,n<9;如果是两位数,n<9+90X2=189;如果是三位数,n<189+900X3=2889;
    说明是三位数。
    步骤2:确定该数字属于哪个数。100+(1001-190)/3= 370。
    步骤3:确定是该数中哪一位。1001-190-(370-100)X3-1 = 1,所以位于“370”的下标为1的位置,即数字7。

    blablabla

    时间复杂度分析:blablabla

    作者:小纸条o--o
    链接:https://www.acwing.com/solution/acwing/content/2043/

    视频AcWing 57. 数字序列中某一位的数字

    class Solution {
    public:
        int digitAtIndex(int n) {
            //i表示是几位数,我们是从第一位(1~9)开始枚举的,s表示第i位数共有多少个(如第1位共有0~9个数),
            //base表示位数的起始值,(0~9起始值为1)。
             long long i = 1, s = 9, base = 1;
             while(n > i * s) {   // 9, 90, 900, 9000, 90000, i * s表示位数总共占多少位。
                 n -= i * s;         // 1000 - 9 - 90 * 2 - 900 * 3 ,当i= 3 时不符合条件,说明是在三位数里面。
                 i ++;                
                 s *= 10;
                 base *= 10;
             }
             cout<< "n="<<n<<endl;
             int number = base + (n + i - 1) / i-1 ; //求位数的第几个数, 1000 - 9 - 180 = n , n / 3 + base - 1(考虑0故减1), (n/i)向上取整为(n + i - 1)/i。
             int r = n % i ? n % i : i;              // 除不尽就是第几位,除尽力了就是最后一位。
             for (int j = 0; j < i - r; j ++) number /= 10; //求数的第i - r位,取出第i - r位。
    
             return number % 10;
            
        }
    };
    带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    UML的相关基础知识
    easyui的datagrid、treegrid增加表头菜单,用于显示或隐藏列
    easyui datagrid load的时候,提交的时候多了name为数字的参数
    Easyui Dialog 设置初始位置
    投票系统的代码总结
    部门组织机构树的使用
    TCP连接客户端的方法
    播放M3U8的js代码
    JAVA的split的用法
    BOLB转word文件,和word文件转换BOLB
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12322980.html
Copyright © 2020-2023  润新知