力扣50(java)-Pow(x,n)(中等)
题目:
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即xn )。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
提示:
- -100.0 < x < 100.0
- -231 <= n <= 231-1
- -104 <= xn <= 104
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/powx-n
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
x n就是将x1,x2,x3,x4,...,xn-1,xn相乘的结果。
一、分解指数、递归
xn:将指数n化小,需要考虑三种情况
1.n为负数的情况:x-n = 1 / xn
2.n为奇数的情况:先分解出一个n,再将剩下的n-1再分解成(n-1)/2, xn = x * x (n-1)/2 * x(n-1)/2
3.n为偶数的情况:xn = x n/2 * x n/2 = (x2)n/2
代码:
1 class Solution {
2 public double myPow(double x, int n) {
3 long b = n;
4 if(b < 0){
5 return 1 / youPow(x, -b);
6 }
7 return youPow(x, b);
8
9 }
10 public double youPow(double x, long n){
11 //底数为1或者指数为1的情况
12 if(x == 1.0 || n == 0) return 1;
13 if((n % 2) == 0){
14 return youPow(x*x, n/2);
15 }
16 return x * youPow(x, n-1);
17 }
18 }

二、二进制
将十进制数n转化成二进制形式,设为amam-1...a3a2a1,故二进制与十进制之间的转换为n = 20a1 + 21a2 + 22a3 + ... + 2m-2am-1 + 2m-1am,故xn = x 20a1 + 21a2 + 22a3 + ... + 2m-2am-1 + 2m-1am = x1a1 * x2a2 * x 4a3 * x2m-2am-1 * x 2m-1am
这就把问题转换为
1.求xn转换成求x, x2, x4, x2的m-2(2的m-2次方), x2的m-1(2的m-1次方),循环累乘x2;
2.求二进制的各位数
- 先判断最右位是否为1 ==> n &1
- 将n右移一位,判断下一个最右位 ==> n >> 1
整个思路为:
1.先排除x== 0.0的情况,0的任何次幂都为0,直接返回0;
2.将整数n转换成浮点型,因为int的范围为 [−2147483648,2147483647] ,当 n = -2147483648时,n变为正数,就会导致越界;
3.初始化结果res = 1;
4.循环二进制数,直至n = 0时跳出循环:
- 当n & 1 == 1时,将x乘入res;
- 执行x = x 2;
- 将n右移1位,n >>= 1;
5.返回结果res。
代码:
1 class Solution {
2 public double myPow(double x, int n) {
3 if(x == 0.0) return 0;
4 long b = n;
5 if(b < 0){
6 x = 1 / x;
7 b = -b;
8 }
9 double res = 1.0;
10 while(b > 0){
11 if((b & 1) == 1){
12 res *= x;
13 }
14 x *= x;
15 b >>= 1;
16 }
17 return res;
18 }
19 }

力扣50(java)-Pow(x,n)(中等)的更多相关文章
- 力扣50题 Pow(x,n)
本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recurs ...
- 刷题-力扣-50. Pow(x, n)
50. Pow(x, n) 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/powx-n/ 著作权归领扣网络所有.商业转载请联系官方授 ...
- 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题
题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
- 力扣1052. 爱生气的书店老板-C语言实现-中等难度
题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...
- 【力扣】剑指 Offer 50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. s 只包含小写字母. 示例: s = "abaccdeff"返回 "b" s = &qu ...
- 力扣算法经典第一题——两数之和(Java两种方式实现)
一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...
- JS数据结构第六篇 --- 二叉树力扣练习题
1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...
- 力扣643.子数组最大平均数I-C语言实现
题目 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示例: 输入:[1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5- ...
- 【力扣leetcode】-787. K站中转内最便宜的航班
题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...
随机推荐
- c语言中int和char之间的转换实例解析
壹: 经常用到c,积累一些小函数,免得下次还要重新写,极大的提升工作效率啊. 贰: 代码很简单,直接上源码: #include <stdio.h> typedef unsig ...
- esp8266 I2C 实例解析及源码分析
一 前言 作为一个方案商兼芯片开发者,研究芯片和功能实现除了基本的工作需要,还有一层就是也变成了一种职业习惯.从芯片到方案,发现很多方案公司的人水平都比较堪忧,只会调用api,根本不会看底层的代码实 ...
- 在salesforce中如何获取Security Token
Trailhead练习Soap API使用Soap UI时,需要Security Token才能登录,在Lightning一直找不到,后来切换到Classic才找到.现在提供一个简单粗暴的方式,快速定 ...
- [.NET项目实战] Elsa开源工作流组件应用(二):内核解读
@ 目录 定义 变量 内存寄存器类 寄存器中的存储区块类 变量到存储的映射类 上下文对象 活动上下文(ActivityExecutionContext) 工作流执行上下文(WorkflowExecut ...
- Prompt进阶系列4:LangGPT(构建高性能Prompt实践指南)--结构化Prompt
Prompt进阶系列4:LangGPT(构建高性能Prompt实践指南)--结构化Prompt 1.结构化 Prompt简介 结构化的思想很普遍,结构化内容也很普遍,我们日常写作的文章,看到的书籍都在 ...
- management.endpoints.web.exposure.include
yml配置文件中 management: endpoints: web: exposure: include: '*' properties配置文件中 management.endpoints.web ...
- 论 C++ 中 double 类型的优化问题
是这样的,我在 OI 出题中,std 习惯使用 double,但是求解,在大数据的情况下用 long double,小数据用 double. 虽然这样也没什么问题,但是在 std 中我是不开启 -O2 ...
- HTTP与WebSocket/WebDAV
WebSocket WebDAV
- Fast多维数组
#include<iostream> #include<chrono> struct Timer { std::chrono::time_point<std::chron ...
- 【WCH以太网接口系列芯片】CH9121\9120、CH395\392以太网系列芯片的硬件电路注意事项
本篇基于沁恒微电子官方的以太网接口芯片的DEMO参考原理图进行分析,对一些注意事项进行标注,如果硬件设计上出现问题可以对照参考. CH912x系列: 1.CH9121:建议设计中可以将31脚RUN脚预 ...