85:Pow(x,n)

来源:互联网 发布:商业地产it管理系统 编辑:程序博客网 时间:2024/06/04 04:20

题目:Implement pow(x, n).

该题有递归和迭代两种解法

解析1:递归方法,代码如下:

// 递归法,时间复杂度 O(logn)// 注意:-5 / 2 = -2, -5 % 2 = -1;class Solution {public:        double myPow(double x, int n) {                if (n < 0) return myPow_aux(1.0 / x, -n);                // 事实上,n 是正数还是负数无关紧要;                // n 的作用只是判断要迭代多少次;                // 在这种情况下正数和对应的负数都能判断出相同的迭代次数;                // 再者如果 n = INT_MIN, -n 也为 INT_MIN;                // 所以从最终结果角度讲,没要必要把 n 写成 -n                // 但为了便于理解,还是把 n 写成 -n。                return myPow_aux(x, n);        }private:        double myPow_aux(double x, int n)                if (n == 0) return 1;                else if (n % 2 != 0) return myPow(x * x, n / 2) * x;                else return myPow(x * x, n / 2);        }};

解析2:迭代代码如下:

// 迭代法,时间复杂度 O(logn)class Solution {public:        double myPow(double x, int n) {                if (n < 0) return myPow(1.0 / x, -n)                // 事实上,n 是正数还是负数无关紧要;                // n 的作用只是判断要迭代多少次;                // 在这种情况下正数和对应的负数都能判断出相同的迭代次数;                // 再者如果 n = INT_MIN, -n 也为 INT_MIN;                // 所以从最终结果角度讲,没要必要把 n 写成 -n                // 但为了便于理解,还是把 n 写成 -n。                double result = 1;                for (int i = 0; n; ++i) {                        if (i != 0) x = x * x;                        if (n % 2 != 0) result *= x;                        n /= 2;                }                return result;        }};
0 0
原创粉丝点击