zoukankan      html  css  js  c++  java
  • 【剑指Offer】面试题16. 数值的整数次方

    题目

    实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

    示例 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] 。

    本题同【LeetCode】50. Pow(x, n)

    思路

    如果暴力求解,即循环将 x 累乘 n 次则超时,考虑到求一个数 n 次方,比如n为8,则只需在x的4次方的基础上再平方一次,依次类推,可得如下公式:

    几种特殊case:

    • n为0
    • n为1
    • n为最小负数,求绝对值会超过整数范围,因此考虑转为无符号数。

    代码

    时间复杂度:O(logn)
    空间复杂度:O(1)

    class Solution {
    public:
        double myPow(double x, int n) {
            double res = 1.0;
            if (n == 0) return res;
            unsigned int t = abs(n);  // 负数最小值溢出    
            res = helper(x, t);
            if (n < 0) res = 1 / res;
            return res;
        }
    
        double helper(double x, unsigned int n) {
            if (n == 0) return 1;
            if (n == 1) return x;
            double res = helper(x, n >> 1);
            res *= res;
            if (n & 0x1 == 1) res *= x;  // n 为奇数
            return res;
        }
    };
    
  • 相关阅读:
    canvas---HTML5新特性
    flex布局之兼容
    前端Blob对二进制流数据的处理方式
    execCommand的复制
    express快速入门
    react+redux+webpack+git技术栈
    react开发
    gulp工程化工具
    python---django安装
    vue+webpack+element-ui+git
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12865505.html
Copyright © 2011-2022 走看看