leetcode笔记:Pow(x, n)

来源:互联网 发布:复杂网络中的幂律分布 编辑:程序博客网 时间:2024/05/01 01:12

一. 题目描述

Implement pow(x, n).

二. 题目分析

实现pow(x, n),即求xn次幂。

最容易想到的方法就是用递归直接求nx的乘积,这里需要根据n的值,判断结果是正数还是负数,这种方法的时间复杂度为O(n)

更加快捷的方法是,使用分治法,对于x^n,有一下公式:

x^n = x^(n / 2) *  x^(n / 2) * x^(n % 2)

使用这种方法的时间复杂度为O(logn)

三. 示例代码

#include <iostream>using namespace std;class Solution {public:    double pow(double x, int n)     {        if (n == 0)            return 1;        if (n > 0)             return power(x, n);        else             return 1 / power(x, -1 * n);        }private:    double power(double x, int n)     {        if (n == 0)             return 1;        double a = power(x, n / 2); // 递归求x^(n/2)        if (n % 2 == 0)             return a * a;        else             return a * a * x;    }};

这里写图片描述

四. 小结

此题为分治思路的经典题型之一。

5 0
原创粉丝点击