剑指offer计划31(数学困难)---java

1.1、题目1

剑指 Offer 14- II. 剪绳子 II

1.2、解法

刚刚好结束了,这个专题,国庆休息,后面再改

1.3、代码


class Solution {
    public int cuttingRope(int n) {
        if(n <= 3) return n - 1;
        int b = n % 3, p = 1000000007;
        long rem = 1, x = 3;
        for(int a = n / 3 - 1; a > 0; a /= 2) {
            if(a % 2 == 1) rem = (rem * x) % p;
            x = (x * x) % p;
        }
        if(b == 0) return (int)(rem * 3 % p);
        if(b == 1) return (int)(rem * 4 % p);
        return (int)(rem * 6 % p);
    }
}


2.1、题目2

剑指 Offer 43. 1~n 整数中 1 出现的次数

2.2、解法

刚刚好结束了,这个专题,国庆休息,后面再改

2.3、代码


class Solution {
    public int countDigitOne(int n) {
        // mulk 表示 10^k
        // 在下面的代码中,可以发现 k 并没有被直接使用到(都是使用 10^k)
        // 但为了让代码看起来更加直观,这里保留了 k
        long mulk = 1;
        int ans = 0;
        for (int k = 0; n >= mulk; ++k) {
            ans += (n / (mulk * 10)) * mulk + Math.min(Math.max(n % (mulk * 10) - mulk + 1, 0), mulk);
            mulk *= 10;
        }
        return ans;
    }
}

3.1、题目2

剑指 Offer 44. 数字序列中某一位的数字

3.2、解法

刚刚好结束了,这个专题,国庆休息,后面再改

3.3、代码


class Solution {
    public int findNthDigit(int n) {
        int digit = 1;
        long start = 1;
        long count = 9;
        while (n > count) { // 1.
            n -= count;
            digit += 1;
            start *= 10;
            count = digit * start * 9;
        }
        long num = start + (n - 1) / digit; // 2.
        return Long.toString(num).charAt((n - 1) % digit) - '0'; // 3.
    }
}


posted @ 2021-09-30 19:42  程序员khaos  阅读(40)  评论(0编辑  收藏  举报