面向小白的力扣50. Pow(x, n)

161 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

一起来学点算法,这里是慢慢学算法,我是小coder,这是力扣的50题,一道中等难度题,我们来实现一下。

题目描述

实现 pow(xn) ,即计算 x 的 n 次幂函数(即,xn )。

题目分析

这个题目是让我们计算 x 的 n 次幂函数,我们怎么样来思考呢?什么是幂?就是一个挨着一个乘对吧,那好如果是2的10次幂,那就是2乘2乘2,一直乘对吧!

那计算机求和是两个数相乘,我们可以每次选择乘一个,2的n次方-1,一直到n-n,n-n我们就返回1,对吧,这样也可以,但是我们要玩一下另外一种思想:分治。

分治分治,就是分而治之,问题就是怎么分怎么治,我们可以把当前问题划分为若干个子问题,每次算一半,你比如要得到2的10次方,我们就先计算2的5次方,之后是2的2次方,之后是2的1次方,然后再把答案统计起来。

比如2的2次方就是2的一次方的结果平方得到。

解题思路

确定操作对象:本题中,操作对象2个x和n 确定操作条件:操作条件看n的大小,如果n是负数,我们得到的是分数,如果n是奇数,算完之后还要乘上本身。 确定操作过程:操作过程为,每次计算一半。 确定结果返回:返回答案。

代码

class Solution {
    public double myPow(double x, int n) {
        double ans =0.0;
        double temp =0.0;
        if(n == 0) return 1.0;
        if(n== -(1<<31)) return 1.0/(myPow(x,0-(n+1))*x);
        if(n<0) return 1.0/(myPow(x,-n));
        temp= myPow(x,n/2);
        ans =temp*temp;
        if(n%2 ==1) ans =ans*x;
        return ans;
    }
}

题目总结

这里需要特别注意的一点是边界,最大值超过int就不能直接算,应该在int的范围内再乘回来。