当前位置: 首页 > news >正文

16. 数值的整数次方


comments: true
difficulty: 中等
edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9816.%20%E6%95%B0%E5%80%BC%E7%9A%84%E6%95%B4%E6%95%B0%E6%AC%A1%E6%96%B9/README.md

面试题 16. 数值的整数次方

题目描述

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

注意:本题与主站 50 题相同:https://leetcode.cn/problems/powx-n/

解法

方法一:数学(快速幂)

快速幂算法的核心思想是将幂指数 n n n 拆分为若干个二进制位上的 1 1 1 的和,然后将 x x x n n n 次幂转化为 x x x 的若干个幂的乘积。

时间复杂度 O ( log ⁡ n ) O(\log n) O(logn),空间复杂度 O ( 1 ) O(1) O(1)。其中 n n n 为幂指数。

2的5次方=2的[101]2进制次方=2的[2的0次方+2的2次方],其中2的2次方 是 (2的0次方)的2次方a*=a

Python3
class Solution:def myPow(self, x: float, n: int) -> float:def qpow(a: float, n: int) -> float:ans = 1while n:if n & 1:ans *= aa *= an >>= 1return ansreturn qpow(x, n) if n >= 0 else 1 / qpow(x, -n)
Java
class Solution {public double myPow(double x, int n) {return n >= 0 ? qpow(x, n) : 1 / qpow(x, -(long) n);}private double qpow(double a, long n) {double ans = 1;for (; n > 0; n >>= 1) {if ((n & 1) == 1) {ans = ans * a;}a = a * a;}return ans;}
}
C++
class Solution {
public:double myPow(double x, int n) {auto qpow = [](double a, long long n) {double ans = 1;for (; n; n >>= 1) {if (n & 1) {ans *= a;}a *= a;}return ans;};return n >= 0 ? qpow(x, n) : 1 / qpow(x, -(long long) n);}
};
Go
func myPow(x float64, n int) float64 {qpow := func(a float64, n int) float64 {ans := 1.0for ; n > 0; n >>= 1 {if n&1 == 1 {ans *= a}a *= a}return ans}if n >= 0 {return qpow(x, n)}return 1 / qpow(x, -n)
}
TypeScript
function myPow(x: number, n: number): number {const qpow = (a: number, n: number): number => {let ans = 1;for (; n; n >>>= 1) {if (n & 1) {ans *= a;}a *= a;}return ans;};return n >= 0 ? qpow(x, n) : 1 / qpow(x, -n);
}
Rust
impl Solution {#[allow(dead_code)]pub fn my_pow(x: f64, n: i32) -> f64 {let mut x = x;let n = n as i64;if n >= 0 {Self::quick_pow(&mut x, n)} else {1.0 / Self::quick_pow(&mut x, -n)}}#[allow(dead_code)]fn quick_pow(x: &mut f64, mut n: i64) -> f64 {// `n` should greater or equal to zerolet mut ret = 1.0;while n != 0 {if (n & 0x1) == 1 {ret *= *x;}*x *= *x;n >>= 1;}ret}
}
JavaScript
/*** @param {number} x* @param {number} n* @return {number}*/
var myPow = function (x, n) {const qpow = (a, n) => {let ans = 1;for (; n; n >>>= 1) {if (n & 1) {ans *= a;}a *= a;}return ans;};return n >= 0 ? qpow(x, n) : 1 / qpow(x, -n);
};
C#
public class Solution {public double MyPow(double x, int n) {return n >= 0 ? qpow(x, n) : 1.0 / qpow(x, -(long)n);}private double qpow(double a, long n) {double ans = 1;for (; n > 0; n >>= 1) {if ((n & 1) == 1) {ans *= a;}a *= a;}return ans;}
}
Swift
class Solution {func myPow(_ x: Double, _ n: Int) -> Double {return n >= 0 ? qpow(x, Int64(n)) : 1 / qpow(x, -Int64(n))}private func qpow(_ a: Double, _ n: Int64) -> Double {var ans: Double = 1var base: Double = avar exponent: Int64 = nwhile exponent > 0 {if (exponent & 1) == 1 {ans *= base}base *= baseexponent >>= 1}return ans}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 论文分享|MLLMs中多种模态(图像/视频/音频/语音)的tokenizer梳理
  • 【Java-一些常见键值对集合面试问题】
  • 学习笔记 韩顺平 零基础30天学会Java(2024.8.8)
  • 2024华为数通HCIP-datacom最新题库(H12-831变题更新⑨)
  • 【计算机网络】LVS四层负载均衡器
  • Leetcode JAVA刷刷站(27)移除元素
  • 【C++】函数的声明
  • 计算机毕业设计 助农产品采购平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • 模型部署 - docker
  • 动态规划问题
  • 当前IT行业10大热门细分技术方向,哪一个更适合你?
  • 基于llama.cpp实现Llama3模型的guff格式转换、4bit量化以及GPU推理加速(海光DCU)
  • Nginx 配置文件中 location、proxy_pass最后的斜杠/作用
  • 仿RabbitMQ实现消息队列
  • 按图搜索的精准营销:基于拍立淘API返回值的用户画像
  • 【comparator, comparable】小总结
  • 07.Android之多媒体问题
  • AWS实战 - 利用IAM对S3做访问控制
  • css属性的继承、初识值、计算值、当前值、应用值
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Linux链接文件
  • mysql常用命令汇总
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python_网络编程
  • Terraform入门 - 1. 安装Terraform
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Zsh 开发指南(第十四篇 文件读写)
  • 从零搭建Koa2 Server
  • 订阅Forge Viewer所有的事件
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 将回调地狱按在地上摩擦的Promise
  • 近期前端发展计划
  • 如何用vue打造一个移动端音乐播放器
  • 使用SAX解析XML
  • 世界上最简单的无等待算法(getAndIncrement)
  • 与 ConTeXt MkIV 官方文档的接驳
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (1)Nginx简介和安装教程
  • (31)对象的克隆
  • (33)STM32——485实验笔记
  • (39)STM32——FLASH闪存
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)SvelteKit教程:hello world
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)setTimeout 和 setInterval 的区别
  • (转)Sql Server 保留几位小数的两种做法
  • (转)我也是一只IT小小鸟
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列