【剑指offer】14. 数值的整数次方(java)

news2024/11/24 16:46:15

文章目录

  • 数值的整数次方
    • 描述
    • 示例1
    • 示例2
    • 示例3
    • 思路
    • 完整代码

数值的整数次方

描述

实现函数 double Power(double base, int exponent),求base的exponent次方。

注意:

1.保证base和exponent不同时为0。

2.不得使用库函数,同时不需要考虑大数问题

3.有特殊判题,不用考虑小数点后面0的位数。

数据范围:$∣base∣≤100 , , ∣exponent∣≤100 ,保证最终结果一定满足 ,保证最终结果一定满足 ,保证最终结果一定满足∣val∣≤10^4 $

进阶:空间复杂度 O ( 1 ) O(1) O(1) ,时间复杂度$ O(n)$

示例1

输入:

2.00000,3

返回值:

8.00000

示例2

输入:

2.10000,3

返回值:

9.26100

示例3

输入:

2.00000,-2

返回值:

0.25000

说明:

2的-2次方等于1/4=0.25

思路

一个很简单的方法就是用for循环不断累乘即可,但需要注意判断当exponent为负时需要对base取倒数,并且exponent需要取相反数,即

if (exponent < 0) {
    exponent = -exponent;
    base = 1 / base;
}

然后用for循环累乘即可

double result = 1;
for (int i = 0; i < exponent; i++) {
    result *= base;
}
return result;

需要注意的是当exponent为0时,任何数的0次方都为1,但由于result初始化为1了,所以不需要再进行特殊情况讨论

下面可以使用递归分治法来解决这个问题

分治的思路就是将一个大问题分为许多相同的子问题,最后再将子问题合并为原问题的解。对于这个题目,假如题目求24,一般情况下先求2,22,23。如果使用分治法,将24分为两个22相乘,然后再将22分为两个2相乘,可以提高计算的效率,具体步骤就是

  • 对于0次方,直接返回结果1
  • 对于exponent为负数的情况,先将exponent取反,再对base取倒数
  • 如果exponent为偶数,则通过递归计算exponent的一半的结果,然后将其平方
  • 如果exponent为奇数,则先递归计算exponent - 1的结果,然后乘以base

即如下图

alt

if (exponent == 0) {
    return 1; // 任何数的0次方都等于1
} else if (exponent < 0) {
    return 1 / Power(base, -exponent); // 处理负指数
} else if (exponent % 2 == 0) {
    double temp = Power(base, exponent / 2); // 使用递归计算指数的一半
    return temp * temp;
} else {
    return base * Power(base, exponent - 1); // 使用递归计算指数-1的结果
}

完整代码

import java.util.*;
public class Solution {
    public double Power(double base, int exponent) {
       if (exponent == 0) {
            return 1; // 任何数的0次方都等于1
        } else if (exponent < 0) {
            return 1 / Power(base, -exponent); // 处理负指数
        } else if (exponent % 2 == 0) {
            double temp = Power(base, exponent / 2); // 使用递归计算指数的一半
            return temp * temp;
        } else {
            return base * Power(base, exponent - 1); // 使用递归计算指数-1的结果
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

家政小程序开发-H5+小程序

移动互联网的发展&#xff0c;微信小程序逐渐成为商家拓展线上业务的重要手段。家政服务作为日常生活中不可或缺的一部分&#xff0c;也开始尝试通过小程序来提高服务质量和效率。 下面是一篇关于家政小程序开发的H5小程序的文章&#xff0c;希望对您有所帮助。 家政服…

【大虾送书第二期】《Python机器学习:基于PyTorch和Scikit-Learn 》

目录 ✨写在前面 ✨亲笔作序推荐 ✨内容简介 ✨学完本书&#xff0c;你将能够 ✨作者简介 ✨PyTorch核心维护者亲笔推荐 ✨抢先购买 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;免费送书活动专栏地址 写在前面 近年来&#xff0c;…

nginx日志分析,实时可视化工具goaccess

一款可以实时分析NGINX访问日志&#xff0c;并且支持可视化的软件 GoAccess - Visual Web Log Analyzer github如下&#xff1a;GitHub - allinurl/goaccess: GoAccess is a real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or th…

精通从入门到工程应用 PLC:

PLC&#xff08;可编程逻辑控制器&#xff09;的学习和入门相对容易&#xff0c;但其难点在于实际的工程应用。学习PLC并熟悉其基本操作并不复杂&#xff0c;但真正掌握其在实际工程中的应用需要更多的经验和实践。 PLC的实际工程应用与具体项目紧密相关&#xff0c;需要了解信…

一套完全开源,支持多租户,界面配置单点的后端框架JVS

JVS的多租户体系统 在IT系统中&#xff0c;“租户”&#xff08;tenant&#xff09;通常用于指代一种多租户架构&#xff08;multi-tenancy&#xff09;&#xff0c;它是一种软件架构模式&#xff0c;允许多个用户或组织共享相同的应用程序或系统实例&#xff0c;但彼此之间的…

【Docker安装部署Hippo4j教程】

&#x1f680; 线程池管理工具-Hippo4j &#x1f680; &#x1f332; AI工具、AI绘图、AI专栏 &#x1f340; &#x1f332; 如果你想学到最前沿、最火爆的技术&#xff0c;赶快加入吧✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域优质创作者&#…

ElasticSearch文档(document)在index上的增删改查

文章目录 一、document定义&#xff1a;二、单条增删改查1、创建索引&#xff1a;2、添加文档&#xff1a;3、获取文档&#xff1a;4、更新文档&#xff1a;5、删除文档&#xff1a; 三、批量增删改查&#xff1a;1、批量添加文档&#xff1a;2、批量更新文档&#xff1a;3、批…

OpenCV中的RGB与YUV转换

1 基本概念 YUV 颜色空间从模拟电视时代开始就被广泛应用于彩色图像的转换与处理。其基于一个 3x3 的矩阵&#xff0c;通过线性变换将 RGB 像素转换为一个亮度&#xff08;Luma&#xff09;分量 Y 以及两个色度&#xff08;Chroma&#xff09;分量 U 和 V。由于模拟电视存在着多…

【图像分割和识别】活动形状模型 (ASM) 和活动外观模型 (AAM)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MySQL常用命令1

文章目录 SQL分类DDL数据库数据库中的表 DMLDQLDCL函数约束多表查询多表关系多表查询概述内连接外连接自连接联合查询子查询标量子查询列子查询行子查询表子查询 多表查询案例 事务事务简介事务操作事务隔离级别 SQL分类 DDL 数据库 查询所有数据库 show databases;查询当前…

Android 四大布局使用详解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、LinearLayout 线性布局二、RelativeLayout 关系布局三、FrameLayout 帧布局四、TableLayout 表格布局 在Android 中&#xff0c;有界面存在的地方就…

Linux 调试进阶(多场景覆盖)

1. 背景 最近在小米项目中分析较多crash问题&#xff0c;结合之前在《程序员的自我修养——链接&#xff0c;状态与库》书中学到的一点皮毛。感触颇深&#xff0c;总结了一些经验&#xff0c;相信对大家分析相关问题有一定的帮助。因为本文的知识点偏于底层&#xff0c;大部分…

前端面试题-js(三)

31 介绍js有哪些内置对象 Object 是 JavaScript 中所有对象的⽗对象数据封装类对象&#xff1a; Object 、 Array 、 Boolean 、 Number 和 String其他对象&#xff1a; Function 、 Arguments 、 Math 、 Date 、 RegExp 、 Error 32 说⼏条写JavaScript的基本规范 不要在同…

【算法集训之线性表篇】Day 09

文章目录 题目基本设计思想代码实现效果 题目 定义三元组(a,b,c)(a,b,c均为整数)的距离D|a-b||b-c||c-a|。给定3个非空集合S1&#xff0c;S2&#xff0c;S3&#xff0c;按升序分别存储在三个数组中。请设计一个尽可能高效的算法&#xff0c;计算并输出所有有可能的三元组中的最…

TabView, DarkMode 的使用

1. TabView 选项卡视图的使用 1.1 实现 /// 选项卡视图 struct TabViewBootcamp: View {State var selectedTab: Int 0let icons: [String] ["heart.fill", "globe", "house.fill", "person.fill"]var body: some View {// tabView…

青岛大学_王卓老师【数据结构与算法】Week05_11_栈与递归_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

考虑设备动作损耗的配电网分布式电压无功优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Nginx】proxy_set_header的变量与X-Forwarded-For伪造客户端IP漏洞

前言 上面突然说&#xff0c;需要检查Nginx反向代理的安全问题并给出了修改方法&#xff0c;小白的我一脸懵逼&#xff0c;明明都是中文&#xff0c;连在一起咋就看不明白了。于是乎&#xff0c;对着修改内容简单学习了一下&#xff0c;在此做个记录&#xff0c;如有问题请大佬…

【Ubuntu】Ubuntu14 安装 open-jdk-1.7(open-jdk-7) 最新 持续更新中

【Ubuntu】Ubuntu14 安装 open-jdk-1.7&#xff08;open-jdk-7&#xff09; 最新 持续更新中 一、概述二、特别说明三、开发环境四、安装 open-jdk-1.7五、配置环境1、配置环境变量路径2、环境变量3、完成安装 一、概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。…

Hive3.1.2伪分布式安装

Hive3.1.2安装 前言 Hive是何物&#xff0c;自己去百度&#xff0c;在此不多bb&#xff0c;直接开整… 学习一个组件&#xff0c;个人觉得最重要的是先学会安装再说&#xff0c;巧妇难为无米之炊撒… 下载 下载地址&#xff1a;https://downloads.apache.org/hive/hive-3.…