剑指Offer #12 数值的整数次方(快速幂)
生活随笔
收集整理的這篇文章主要介紹了
剑指Offer #12 数值的整数次方(快速幂)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目來源:牛客網-劍指Offer專題
題目地址:數值的整數次方
題目描述
給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
保證base和exponent不同時為0
題目解析
像這種求 ana^nan 的題目,第一時間想到的必須是快速冪,時間復雜度 O(logn)O(logn)O(logn) 妥妥的,別再用那種 O(n)O(n)O(n) 算法了。
如果不會快速冪的小伙伴,推薦看看這篇文章: 數論基礎之快速冪(詳細教程)。
當然,這道題還沒有那么簡單,和我們平時做的數論題目不一樣的是,這里的 nnn 有可能是負數
設 nnn 為正數,則 ?n-n?n 為負數,我們就可以做如下簡單處理:
a?n=(an)?1a^{-n}=(a^n)^{-1} a?n=(an)?1
我們先求出 ans=a∣n∣ans=a^{|n|}ans=a∣n∣ :
- 如果 nnn 為正數,則 ansansans 就是最終答案;
- 如果 nnn 為負數,則最終答案為 ans?1ans^{-1}ans?1
代碼如下:
public class Solution {public double Power(double base, int exponent) {int n = Math.abs(exponent);double ans = 1;while (n != 0) {if (n % 2 == 1) {ans *= base;}base *= base;n /= 2;}return exponent > 0 ? ans : (1 / ans);} }如果只是為了通過的話,你也可以用下面這種沒有靈魂的寫法:
public class Solution {public double Power(double base, int exponent) {return Math.pow(base, exponent);} }如果本文對你有所幫助,要記得點贊哦~
總結
以上是生活随笔為你收集整理的剑指Offer #12 数值的整数次方(快速幂)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指Offer #11 二进制中1的个数
- 下一篇: 剑指Offer #13 调整数组顺序使奇