leetcode第50题

简介: 求幂次方,用最简单的想法,就是写一个 for 循环累乘。至于求负幂次方,比如 2^{-10}2−10,可以先求出 2^{10}210,然后取倒数,1/2^{10}1/210 ,就可以了double mul = 1;if (n > 0) { for (int i = 0; i < n; i++) { mul *= x; }} else { n = -n; for (int i = 0; i < n; i++) { mul *= x; } mul = 1 / mul;}

image.png

就是求幂次方。

解法一

求幂次方,用最简单的想法,就是写一个 for 循环累乘。

至于求负幂次方,比如 2^{-10}210,可以先求出 2^{10}210,然后取倒数,1/2^{10}1/210 ,就可以了

doublemul=1;
if (n>0) {
for (inti=0; i<n; i++) {
mul*=x;
    }
} else {
n=-n;
for (inti=0; i<n; i++) {
mul*=x;
    }
mul=1/mul;
}

但这样的话会出问题,之前在29题讨论过,问题出在 n = - n 上,因为最小负数 -2^{31}231取相反数的话,按照计算机的规则,依旧是-2^{31}231,所以这种情况需要单独讨论一下。

if (n==-2147483648) {
return0;
}

当然,这样做的话 -1 ,和 1 也需要单独讨论下,因为他们的任意次方都是 1 或者 -1

if (x==-1) {
if ((n&1) !=0) { //按位与不等于 0 ,说明是奇数return-1;
    } else {
return1;
    }
}
if (x==1.0)
return1;

代码出来了

publicdoublemyPow(doublex, intn) {
if (x==-1) {
if ((n&1) !=0) {
return-1;
        } else {
return1;
        }
    }
if (x==1.0)
return1;
if (n==-2147483648) {
return0;
    }
doublemul=1;
if (n>0) {
for (inti=0; i<n; i++) {
mul*=x;
        }
    } else {
n=-n;
for (inti=0; i<n; i++) {
mul*=x;
        }
mul=1/mul;
    }
returnmul;
}

时间复杂度:O(n)。

从一般的方法,到递归,最后的解法,直接从 2 进制考虑,每一个数字,都可以转换成 2 的幂次的和,从而实现了最终的解法。

空间复杂度:O(1)。


相关文章
|
6月前
leetcode-472. 连接词
leetcode-472. 连接词
50 0
|
1月前
【LeetCode 02】暴力法总结
【LeetCode 02】暴力法总结
17 1
|
6月前
leetcode-827:最大人工岛
leetcode-827:最大人工岛
62 0
leetcode 827 最大人工岛
leetcode 827 最大人工岛
60 0
leetcode 827 最大人工岛
LeetCode 354. Russian Doll Envelopes
给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。
81 0
LeetCode 354. Russian Doll Envelopes
leetcode 283 移动零
leetcode 283 移动零
57 0
LeetCode 283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
87 0
|
算法
leetcode第42题
也就是红色区域中的水, 数组是 height = [ 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 ] 。 原则是高度小于 2,temp ++,高度大于等于 2,ans = ans + temp,temp = 0。 temp 初始化为 0 ,ans 此时等于 2。 height [ 0 ] 等于 0 < 2,不更新。 height [ 1 ] 等于 1 < 2,不更新。 height [ 2 ] 等于 0 < 2, 不更新。 height [ 3 ] 等于 2 >= 2, 开始更新 height [ 4 ] 等于 1 < 2,temp = temp + 1 = 1。 h
104 0
leetcode第42题
leetcode第55题
当自己按照 45 题的思路写完的时候,看 Solution 的时候都懵逼了,这道题竟然这么复杂?不过 Solution 把问题抽象成动态规划的思想,以及优化的过程还是非常值得学习的。
leetcode第55题