`
SunnyYoona
  • 浏览: 365680 次
社区版块
存档分类
最新评论

[LeetCode]50.Pow(x, n)

 
阅读更多

【题目】

Implement pow(x,n).

【分析】

采用分治思想。


对于n是奇数时,x^n = x^(n/2)* x^(n/2)* x

对于n是偶数时,x^n =x^(n/2)* x^(n/2)

x^(n/2)用一个变量sub记录,x^n = sub * sub * x^(n % 2) 这样x^(n/2)就计算一次

注意:n有可能是负数 转换为 1.0 /pow(x, -n) 此时-n有可能溢出 n 逐渐减半的过程中就会解决溢出问题。

【代码】

class Solution {
public:
    double pow(double x, int n) {
        // 终止条件
        if(n < 0){
            return 1.0 / pow(x,-n);
        }//if
        if(n == 0){
            return 1.0;
        }//if
        if(n == 1){
            return x;
        }//if
        // 递归
        // x^n = x^(n/2) * x^(n/2) *x^(n%2)
        double sub = pow(x,n / 2);
        return  sub * sub * pow(x,n % 2);
    }
};

这是一种错误的答案:n溢出导致死循环


【代码二】

/*********************************
*   日期:2015-01-29
*   作者:SJF0115
*   题目: 50.Pow(x, n)
*   网址:https://oj.leetcode.com/problems/powx-n/
*   结果:AC
*   来源:LeetCode
*   博客:
**********************************/
#include <iostream>
using namespace std;

class Solution {
public:
    double pow(double x, int n) {
        // 负数
        if(n < 0){
            return 1.0 / pows(x,-n);
        }//if
        // 正数
        else{
            return pows(x,n);
        }
    }
private:
    double pows(double x,int n){
        // 终止条件
        if(n == 0){
            return 1.0;
        }//if
        if(n == 1){
            return x;
        }//if
        // 递归
        // x^n = x^(n/2) * x^(n/2) *x^(n%2)
        double sub = pow(x,n / 2);
        return  sub * sub * pow(x,n % 2);
    }
};



int main(){
    Solution solution;
    double x = 2.5;
    int n = 2;
    double result = solution.pow(x,n);
    // 输出
    cout<<result<<endl;
    return 0;
}








分享到:
评论

相关推荐

    LeetCode最全代码

    15 | [3 Sum](https://leetcode.com/problems/3sum/) | [C++](./C++/3sum.cpp) [Python](./Python/3sum.py) | _O(n^2)_ | _O(1)_ | Medium || Two Pointers 16 | [3 Sum Closest]...

    leetcode答案-LeetcodeTopAnswer:https://leetcode-cn.top的回答

    50.pow-x-n 题目: 答案: 69.x-的平方根 题目: 答案: 70.爬楼梯 题目: 答案: 94.二叉树的中序遍历 题目: 答案: 101.对称二叉树 题目: 答案: 141.环形链表 题目: 答案: 206.反转链表 题目: 答案: 剑指...

    Leetcode扑克-coding-interviews:编码面试

    Leetcode扑克 项目简介 该项目为《剑指Offer》题解 OnlineJudge 题目 个人建议能使用LeetCode还是尽量用LeetCode。...Pow(x, n) 调整数组顺序使奇数位于偶数前面 905. Sort Array By Parity 链表中倒数第

    猜单词leetcode-leetcode:我的leetcode

    猜单词leetcode 通过 leetcode 学习数据结构与算法 数据结构 data structure 数组(栈 队列) 链表 ...50.pow-x-n.js 69.x-的平方根.js 278.第一个错误的版本.js 374.猜数字大小.py 递归 recursion +

    leetcode530-LeetcodeSolution:Leetcode的解决方案

    12.整数转罗马50.Pow(x,n); 69.Sqrt(x); 300.LongestIncreasingSubsequence。 338. 计数位数419. 棋盘中的战舰461. 汉明距离476.数字补码500.键盘排93.恢复IP地址344.反向字符串463.岛屿周长485.最大连续数513. 查找...

    leetcode-python:这是我的python的leetcode解决方案

    在旋转排序数组中搜索140.Fast Power 428.Pow(x,n) 845.最大公约数39.恢复旋转排序数组8,旋转字符串 两个指针56.两次相加415.有效回文891.有效回文II 521.删除重复的号码604.窗口总和610.TwoSum-差等于目标228....

    leetcode338-LeetCode:提升我的编码技能并快速找到工作

    leetcode 338 LeetCode Level up my coding skills and quickly land a job, happy coding! Structure 1.两数之和 ...50.Pow(x n) 51.N皇后 52.N皇后 II 547.朋友圈 617.合并二叉树 69.x的平方根 70.爬楼

    leetcode跳跃-leetcodeTest:刷题leetcode

    leetcode 跳跃 leetcodeTest 刷题 leetcode 1.两数之和 2.两数相加 ...Pow(x,n) 中等题 快速幂算法 53 最大子序和 简单题 54 螺旋矩阵 中等题 设置上下左右边界 55 跳跃游戏 中等题 关于递归返回值,如果

    扔鸡蛋leetcode-Leetcode:力码

    编写程序计算pow(x, y) 50. pow(x, n) 5.7 计算 x^y 2. 给定一个指向单向链表中要删除的节点的指针,如何删除它? 237. 删除链表中的节点 2.3 删除中间节点 3.从第一个字符串中删除出现在第二个字符串中的字符 4. ...

    leetcode中国-LeetCode:力扣合集

    pow(x, n) 34. 查找有序数组中元素的首尾位置 1-是 35. 搜索插入位置 1-是 658. 找出 K 个最近的元素 1-否 33. 在旋转排序数组中搜索 1-否 81. 在旋转排序数组中搜索 II 1-否 153. 在旋转排序数组中求最小值 154. 在...

    Pow(x, n)(递归+奇偶考虑)1

    示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3

    leetcode中国-leetcode_practice:算术学习项目,每日更新

    n)](#73.Pow(x, n)) [75.779. 第K个语法符号](#75.779. 第K个语法符号) 1.给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定...

    LeetCode-NoteBook:docsifyjs

    LeetCode笔记本docsifyjsLeetCode算法Java c / c ++ javascript的... Pow(x, n)34. First & LastPositionElementInSortedArr94. Binary Tree Inorder Traversal144. Binary Tree Preorder Traversal145. Binary Tree

    leetcode分发糖果-LeetCode:力码

    50.Pow(x, n) 分治算法-二分查找 14 162.寻找峰值 分治算法-二分查找 19-3-22 15 29.两数相除 分治算法-二分查找 16 34.在排序数组中查找元素的第一个和最后一个位置 分治算法-二分查找 17 101.对称二叉树

    LeetCode解题总结

    11.1 实现pow(x, n) 11.2 Sqrt(x) 12. 贪心算法 12.1 跳台阶游戏 12.2 买卖股票的最佳时机 12.2.1 最多允许交易一次 12.2.2 可以交易任意多次 12.2.3 最多可以交易两次 12.2.4 可以交易任意多次 12.2.5 交易后需要...

    MyLeetCode

    记录自己的LeetCode记录 ...50.Pow(x,n) 回溯算法 39.组合总数 40.组合总和II 46.全排序 47.全排序II 51.皇后 动态规划 53.最大子序和 贪心算法 45.跳跃游戏II 55.跳跃游戏 排序 56.合并区间

    leetcode338-leetcode:leetcode

    pow(x, n) :check_mark_button: 53. 最大子阵列 :check_mark_button: 55. 跳跃游戏 2月21日 :check_mark_button: 41.第一个缺失的阳性 水问题 - dp :check_mark_button: :glowing_star: 42. 收集雨水 :check_mark_...

    Java实现 LeetCode 479 最大回文数乘积

    479. 最大回文数乘积 你需要找到由两个 n 位数的乘积组成的最大回文数。 由于结果会很大,你只需返回最大回文数 mod 1337得到的结果。 示例: 输入: 2 ... long max = (long)Math.pow(10,n) - 1; for(long

    lrucacheleetcode-Leetcode:力码

    pow(x, n) 方法:二分查找 53. 最大子阵列 方法一:分而治之: A[low...high] 的任何连续子数组 A[i...j] 必须正好位于以下位置之一: (1) 完全在子数组 A[low...mid] 中,使得 low &lt;= i &lt;= j &lt;= mid; (2)...

    LeetCode:JavaScript JavaScript对LeetCode的解决方案

    atoi盛最多水的容器三数之和最接近的三数之和四数之和删除链表的倒数第 n 个节点括号生成两两交换链表中的节点两数相除在排序数组中查找元素的第一个和最后一个位置有效的数独字符串相乘字母异位词分组pow-...

Global site tag (gtag.js) - Google Analytics