实现 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] 。

方法一:暴力法,时间复杂度:O(n),通不过

class Solution {
    public double myPow(double x, int n) {
            double sum=1;
            int i;
            if(n>0)
            {
                for(i=1;i<=n;i++)
                {
                    sum*=x;
                }
            }
            else if(n<0)
            {
                n = -n;
                for(i=1;i<=n;i++)
                {
                    sum*=x;
                }
                sum=1/sum;
            }
            else
            {
                sum = 1;
            }
            return sum;
    }
}

方法二:二分法

例如:次方为偶数的话,1024 = 32*32,即2^10=2^5*2^5,依次类推,2^n=2^(n/2)*2^(n/2)

次方为奇数复杂一点,2048(2^11)=32*32*2,   2^n=2^(n/2)*2^(n/2)*2

提交的代码:

class Solution {
    public static double powRecursion(double x, int n) {
        if (n == 0) {
            return 1;
        }
        if ((n%2) == 0) { 
            return powRecursion(x * x, n / 2);
        } else { 
            return powRecursion(x * x, n / 2) * x;
        }
    }
     public static double myPow(double x, int n) {
            double sum=1;
            if(n==1)
            {
                return x;
            }
            if(n==-1)
            {
                return 1/x;
            }
            int i=0;
            if(n==0)
            {
                return 1;
            }
            else if(n<0)
            {
                n=-n;
                x = 1/x;
            }
            sum = powRecursion(x,n);
            return sum;
    }
}

完整的代码:

import java.util.Scanner;

public class Solution50 {
    public static double powRecursion(double x, int n) {
        if (n == 0) {
            return 1;
        }
        if ((n%2) == 0) { 
            return powRecursion(x * x, n / 2);
        } else { 
            return powRecursion(x * x, n / 2) * x;
        }
    }
     public static double myPow(double x, int n) {
            double sum=1;
            if(n==1)
            {
                return x;
            }
            if(n==-1)
            {
                return 1/x;
            }
            int i=0;
            if(n==0)
            {
                return 1;
            }
            else if(n<0)
            {
                n=-n;
                x = 1/x;
            }
            sum = powRecursion(x,n);
            return sum;
           }
     public static void main(String[] args)
     {
         double x;
         int n;
         Scanner sc = new Scanner(System.in);
         x = sc.nextDouble();
         n = sc.nextInt();
         System.out.println(myPow(x,n));
     }
}

Leetcode--50. Pow(x,y)相关推荐

  1. 【分治】LeetCode 50. Pow(x, n)

    LeetCode 50. Pow(x, n) Solution1:我的答案 偷鸡摸狗的做法 class Solution { public:double myPow(double x, int n) ...

  2. c语言的 pow函数是快速幂吗,leetcode 50. Pow(x, n)(快速幂)

    就是一个二分法快速幂. 但是需要注意的问题是这里是实数,而且n可能为负. int的范围是-2,147,483,648 至 2,147,483,647.如果为-2,147,483,648那么直接n=-n ...

  3. Leetcode 50. Pow(x, n)

    50. Pow(x, n) Total Accepted: 96891 Total Submissions: 348858 Difficulty: Medium Implement pow(x, n) ...

  4. LeetCode 50. Pow(x, n)(二分查找)

    文章目录 1. 题目 2. 二分查找 2.1 递归 2.2 循环 1. 题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 输入: 2.00000, 10 输出: 1024.000 ...

  5. leetCode 50.Pow(x, n) (x的n次方) 解题思路和方法

    Pow(x, n) Implement pow(x, n). 思路:题目不算难.可是须要考虑的情况比較多. 详细代码例如以下: public class Solution {public double ...

  6. leetcode 50. Pow(x, n) 快速幂

    好像没怎么快 #include <iostream> #include <math.h> using namespace std;class Solution {public: ...

  7. leetcode 50. Pow(x,n)

    题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 解法 快速幂 利用二进制运算的性质 class Solution {public:double myPow(double x, int ...

  8. 实验2.4 使用系统函数pow(x,y)计算xy的值

    题目 使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h AC的C++代码如下: #include<iostream> #include<math.h> us ...

  9. Math.pow(x,y)使用注意事项

    首先明确Math.pow(x,y)的作用就是计算x的y次方,其计算后是浮点数,这里先看一个例子: 例1:153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3* ...

  10. history of program atan2(y,x)和pow(x,y)

    编年史 1951 – Regional Assembly Language  1952 – Autocode  1954 – IPL (LISP语言的祖先)  1955 – FLOW-MATIC (C ...

最新文章

  1. docker 数据卷 mysql_Docker容器数据卷原理及使用方法解析
  2. android onLayout死循环
  3. 聊聊spring tx的EnableTransactionManagement
  4. CSS的alt:图片无法显示时候显示alt内容
  5. asp.net跨页面传值收集
  6. 数据库-数据类型介绍
  7. java panel frame_Java 版 (精华区)--Frame和Panel的区别【转载】
  8. WebQML笔记-qml获取canvas中元素是否被按下
  9. 使用CCDirector的notificationNode来创建独立的信息提示层
  10. 程序员如何成为编程高手并以此创业
  11. java自学难点_分享在达内教育培训Java的感受
  12. 个人整理的常用python脚本【很好用】
  13. 【托业】【新托业TOEIC新题型真题】学习笔记7-题库二-P1~4
  14. 制作png格式透明图片的简易方法
  15. 百度导航怎么不显示服务器,百度地图的导航设置中选择在线优先还是离线优先?...
  16. MySQL 之union all 与 order by 同时出现问题
  17. django mezzanine添加多语言支持
  18. 简易处理字典MDX文件的方法
  19. python爬虫基础知识
  20. Debian10修改静态ip

热门文章

  1. LeetCode 815. 公交路线(最少换乘,BFS)
  2. Kaggle 房价预测竞赛优胜方案:用 Python 进行全面数据探索
  3. python中的文件读取注意事项
  4. php将文件夹压缩成zip文件,将文件夹压缩成zip文件的php代码_php实例
  5. matlab记录路径,matlab对文件目录路径的操作
  6. python odoo_odoo python 使用缓存
  7. 知乎热榜:程序员达到什么水平能拿到20k月薪
  8. 对比学习有多火?文本聚类都被刷爆了…
  9. day01『NLP打卡营』实践课1:词向量应用演示
  10. Android官方开发文档Training系列课程中文版:目录