剑指 Offer 第16题:数值的整数次方

2022-07-09  本文已影响0人  放开那个BUG

1、前言

题目描述

2、思路

这道题的基本思路是,幂分为小于0和大于等于0的。如果小于0,如3^-2=1/9;大于等于0比较简单。

那么如果幂是偶数,如 3^4 = 81,则可以分为 3^2 * 3^2 = 81,每次将幂二等分,最后再合并起来。
如果为奇数,则在此基础上再乘一个数,如 3^5 = 3^2 * 3^2 * 3

3、代码

class Solution {
    public double myPow(double x, int n) {
        if (n < 0) {
            return 1 / divideAndConquer(x, -n);
        }
        return divideAndConquer(x, n);
    }

    private double divideAndConquer(double x, int n) {
        if (n == 0) {
            return 1;
        }

        if (x == 1) {
            return 1;
        }

        // 分治思想:分
        double square = divideAndConquer(x, n / 2);
        // 分治思想:合,分为奇数偶数
        return n % 2 == 0 ? square * square : square * square * x;
    }

}
上一篇下一篇

猜你喜欢

热点阅读