zoukankan      html  css  js  c++  java
  • 【LeetCode】50. Pow(x, n)

    题目

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

    示例 1:

    输入: 2.00000, 10
    输出: 1024.00000
    

    示例 2:

    输入: 2.10000, 3
    输出: 9.26100
    

    示例 3:

    输入: 2.00000, -2
    输出: 0.25000
    解释: 2-2 = 1/22 = 1/4 = 0.25
    

    说明:

    • -100.0 < x < 100.0
    • n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

    本题同【剑指Offer】面试题16. 数值的整数次方

    思路一:二进制

    比如指数为18,二进制表示为10010,即1 * 2^4 + 0 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0, 而x^18 = x ^ (2^4 + 2^1),即将对应1的位置权重相加,系数可以通过0和1可以通过右移指数得到,幂次可以通过不断累乘得到。
    注意点:指数为负数最小值-2147483648时,考虑用长整型保存。

    代码

    时间复杂度:O(logn),即为对 nn 进行二进制拆分的时间复杂度。
    空间复杂度:O(1)

    class Solution {
    public:
        double myPow(double x, int n) {
            double res = 1.0;
            long long p = n;
            if (p < 0) {
                x = 1/x;
                p = -p;
            } 
            while (p) {
                if (p & 1 == 1) {
                    res *= x;
                }
                x *= x;                            
                p = (p >> 1);
            }
            return res;
        }
    };
    

    思路二:递归

    如果指数是偶数,则可以利用x^n = x^(n/2) * x^(n/2);
    如果指数是奇数,则x^n = x^(n-1)/2 * x^(n-1)/2 * x。

    代码

    时间复杂度:O(logn),即为递归的层数。
    空间复杂度:O(logn),即为递归的层数。这是由于递归的函数调用会使用栈空间。

    class Solution {
    public:
        double myPow(double x, int n) {
            long long int p = n;
            if (p < 0) {
                x = 1/x;
                p = -p;
            } 
            double res = fun(x, p);        
            return res;
        }
        double fun(double x, long long int n) {
            if (n == 0)  return 1.0;
            if (n == 1)  return x;
            double res = fun(x, n >> 1);
            res *= res;
            if (n & 1 == 1) res *= x;
            return res;
        }
    };
    
  • 相关阅读:
    Django基础
    DRF初始化/DRF认证、权限、限流、分页、过滤、序列化
    Pyinstaller安装和使用
    爬虫概述
    django在test.py测试文件中的配置
    django ORM 多对多关系
    django中的分页
    vue安装及新建项目
    app应用路由设置
    Django之Session与Cookie原理及区别
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12865611.html
Copyright © 2011-2022 走看看