码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode笔记:Pow(x, n)

时间:2017-07-22 21:15:31      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:add   code   addclass   asc   std   pre   comm   turn   line   

一. 题目描写叙述

Implement pow(x, n).

二. 题目分析

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

最easy想到的方法就是用递归直接求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;
    }
};

技术分享

四. 小结

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

leetcode笔记:Pow(x, n)

标签:add   code   addclass   asc   std   pre   comm   turn   line   

原文地址:http://www.cnblogs.com/lxjshuju/p/7222365.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!