p10 pow(x,n) 数值的n次方(leetcode 50)
Posted repinkply
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了p10 pow(x,n) 数值的n次方(leetcode 50)相关的知识,希望对你有一定的参考价值。
一:解题思路
第一种方法:这个题目首先可以想到的用一个循环,将x连续乘以n次,如果n小于0,则返回其倒数,如果n大于0,则直接返回其结果。
第二种方法:要用到二分搜索的思想在里面。
二:完整代码示例 (C++版和Java版)
第一种方法C++
//Time:O(n),当n非常大的时候,效率不高 //Space:O(n) class Solution { public: double myPow(double x, int n) { double result = 1.0; long N = (long)abs(n);//此处将n转化为long的目的是为了防止n为整数的最小值的时候会溢出。 for (int i = 0; i < N; i++) { result *= x; } return n<0?(1/result):(result); } };
第一种方法:Java
class Solution { public double myPow(double x, int n) { double result=1.0; long N = Math.abs((long)n); for(int i=0;i<N;i++) { result*=x; } return n<0?(1/result):result; } }
第二种方法:C++
class Solution { public: double myPow(double x, int n) { double result = 1.0; long N = abs(long(n));//此处需要注意,先要将其转化为long型,然后再求其绝对值 while (N != 0) { if (N & 1 == 1) result *= x; x *= x; N >>= 1; } return n < 0 ? (1 / result) : result; } };
第二种方法:Java
class Solution { public double myPow(double x, int n) { double result=1.0; long N=Math.abs((long)n); while(N!=0) { if((N&1)==1) result*=x; x*=x; N>>=1; } return n<0?(1/result):(result); } }
以上是关于p10 pow(x,n) 数值的n次方(leetcode 50)的主要内容,如果未能解决你的问题,请参考以下文章