每日刷题(4)——剑指 Offer 16. 数值的整数次方

【回眸】剑指offer(一)剑指offer怎么 最近有算法面的需要,直接搜出来的学习建议和技巧都太宽泛,而且夹杂着很多广告。借助第二大脑给自己提了一些建议和计划,希望也能帮助到屏幕面前的你! 阅读详情

本篇文章题目来源于leetcode

前言

哈喽,大家好,我是小雨,今天做了一些剑指 Offer的题目,其中 16. 数值的整数次方 写了4版代码才通过,给我留下了深刻的印象。此题对时间的要求简直严格,但是从另一方面也给了做题者突破自己,优化代码的强大动力,非常不错。本文就对此题进行细致的分析吧!

Question 剑指 Offer 16. 数值的整数次方

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。

示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000

提示:

  • -100.0 < x < 100.0
  • -231 <= n <= 231-1
  • -104 <= xn <= 104

Solution

这题的尝试了很多思路,大部分都超时了,最后使用快速幂算法进行解题,具体的思维过程如下:

1.看到这道题,首当其中的就是暴力法,即首先判断n是否是负数,如果是负数那么后续要进行倒数的操作,随后需要求解x的N次方的值,根据n的次数,反复执行*x的操作即可,代码如下,结果超时,后续的思路主要优化求解x的N次方的值,对正负判定不做优化。

2.我们可以发现x的N次方等于x的(N/2)次方乘以x的(N-N/2)次方,所以我们只需要求出x的(N/2)次方的值 y 即可,再求出y*y即可得出结果,代码如下,还是超时。

3.再次观察,发现其实只有最后一步进行了优化,x的(N/2)次方的值还是用累乘得出。再次优化,我们可以使用递归,把求x的N次方转化为求x的(N/2)次方x的(N-N/2)次方,形成了类似树的结构,进行递归操作即可得出答案,代码如下,还是超时!

4.再次观察,发现递归中,使用了类似树的结构,是先求左边,再求右边,递归求解,但是实际上,只需要求一边的结果(如左边)即可,另一边的结果可以通过左边的结果得出来!其实到这一步,就是快速幂算法了,代码如下,终于成功通过。

Code

//第一种思路

func myPow(x float64, n int) float64 {
	flag := false 
	if n < 0 {
		flag = true
		n = -n 
	}
	temp := x
    x = 1 
	for i := 0; i < n; i++ {
		x*=temp
	}
	if flag {
		x = 1/x 
	}
    return x

}

//第二种思路

func myPow(x float64, n int) float64 {
	flag := false 
	if n < 0 {
		flag = true
		n = -n 
	}

	temp := x
	x=1

	if n %2 == 0 {
		for i := 0; i < n/2; i++ {
			x*=temp
		}
		x *=x
	}else {
		for i := 0; i < n/2; i++ {
			x *= temp
		}
		x *=x
		x *=temp
	}
	
	
	
	
	if flag {
		x = 1/x
	}
	
	
return x

}

//第三种思路

func myPow(x float64, n int) float64 {
	flag := false
	if n < 0 {
		flag = true
		n = -n
	}
	var dfs func(n int)float64
	
	dfs = func(n int) float64 {
		if n == 0 {
			return 1 
		}else if n == 1 {
			return x
		}
		
		l:=dfs(n/2)
		r:=dfs(n-(n/2))
		return l * r
	}
	x = dfs(n)

	if flag {
		x = 1/x
	}
	return x
}

//第四次思路
func myPow(x float64, n int) float64 {
	flag := false
	if n < 0 {
		flag = true
		n = -n
	}
	var dfs func(n int)float64
	
	dfs = func(n int) float64 {
		if n == 0 {
			return 1 
		}else if n == 1 {
			return x
		}
		
		y := dfs(n/2) 
        if n%2 == 0 {
            return y*y
        }else{
            return y*y*x
        }

	}
	x = dfs(n)
	if flag {
		x = 1/x
	}
	return x
}
道路场景分割:车道线、可行驶区域与路沿检测 道路场景分割:车道线、可行驶区域与路沿检测​ ,人工智能,计算机视觉,大模型,AI,文章围绕道路场景分割展开,涵盖车道线、可行驶区域与路沿检测。介绍了基本概念、重要性,各部分检测的类型、法、难点及解决思路,还涉及技术融合、数据集、评价指标、发展趋势、应用案例、代码示例、不同天气处理、实际问案、实现流程、相关技术工具、教育研究应用、产业前景、伦理安全问及学习资源等,全面阐述了道路场景分割的多面内容,为相关学习和研究提供了丰富信息。 阅读详情

相关推荐

扫地机器人设计与实现——基于嵌入式系统的智能家居解决

本文介绍了基于嵌入式技术的扫地机器人设计与实现。通过利用STM32单片机、传感器、驱动系统等硬件组件,并结合路径规划与控制算法、远程控制等软件技术,设计出了一款具有智能避障、路径规划、自动充电等功能的扫地机器人。系统的开发不仅提高了清洁效率,也为进一步研究和优化扫地机器人提供了实践基础。

2201_76125393的博客 1600

剑指offer》Java版全系列解(2021版,持续更新!)

剑指offer》Java版全系列解(2021版,持续更新!) 本系列记录了最新版 《剑指Offer》 的解过程与代码,因为原书是c语言。这里用Java代码复现并优化,并包含解分析。 希望各位能够点赞,收藏!关注我! 每日更新! 如果在准备java面试,可以看看我的另外一篇文章! Java面试复习体系总结(2021版,持续更新) csdn解(包含详细分析过程,代码) 力扣链接 剑指Offer系列(java版,详细解析) 03. 数组中重复的数字 剑指 Offer 03. 数组中重复

Viper的程序员修炼手册 2万+

Opencv3.0 鱼眼相机标定(fisheye)

参照opencv及网上资料基于opencv3.0编写,标定结果与matlab2015一致,欢迎交流!

(分治) 剑指 Offer 16. 数值数次 ——【Leetcode每日

剑指 Offer 16. 数值数次 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问

weixin_43412762的博客 561

LeetCode每日剑指 Offer 16. 数值数次(持续更新)

不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 2021/6/1 今日目(剑指Offer系列) 剑指 Offer 16. 数值数次 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。 不得使用库函数,同时不需要考虑大数问。 示例: 示例 1: 输入:x = 2.00000, n = 10 输出:1024.00000 示例 2: 输入:x = 2.10000, n = 3 输出:9.26100 示例 3: ..

CSDN 精品推荐 449

剑指 Offer 16. 数值数次 - leetcode 剑指offer系列

目难度: 中等 原链接 今天继续更新剑指 offer 系列, 这道又是一道经典问, 可能快速幂大家都有所了解, 这里额外提供一种不一样的思路 老样子晚上 6 点 45 分准时更新公众号 每日精选算法, 大家记得关注哦~ 另外在公众号里回复 offer 就能看到剑指 offer 系列当前连载的所有文章了 目描述 实现函数 double Power(double base, int exponent),求 base 的 exponent 次。不得使用库函数,同时不需要考虑大数问.

随便发挥的博客 373

剑指Offer》Java版全系列笔记+顺序(最新版,已完结~~)

本系列记录了剑指Offer每日笔记(包含解思路),顺序也是按照由易到难进行的。 书山有路勤为径。希望和大家共同进步! 2021/10/15 每天一更(2~3),多多关注呀! 第 1 天 栈与队列(简单) 剑指 Offer 09. 用两个栈实现队列 剑指 Offer 30. 包含min函数的栈 ...

遇事不决问清风的博客 2620

每日剑指 Offer 16. 数值数次

实现函数double Power(double base, int exponent),求base的exponent次。不得使用库函数,同时不需要考虑大数问。 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, 3 输出: 9.26100 示例 3: 输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25 说明: -100.0 < x < 100.0 n 是 32.

计忆芳华的博客 415

[每日一道小算法(六)] [代码完性]数值数次

前言: 今天又来更新算法啦,这道出自剑指offer中,挺简单,就看你能不能把答案写正确。 目描述 给定一个double类型的浮点数base和int类型的数exponent。求base的exponent次。 保证base和exponent不同时为0 目解析 这到是来求数值数次,在求数值数次时我们要考虑到底数不能为0,这是其中一个限定条件,然后还要考虑得一个问时知数为正数和...

qq_39397165的博客 291

Leetcode-每日剑指 Offer 16. 数值数次

实现,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问

lucky_1314520的博客 614

每日- ​剑指 Offer 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 代码 class Solution { publ...

m0_60309952的博客 7383

每日链接记录

1,剑指offer链表知识下引出 (1)Stack,栈 https://www.cnblogs.com/magisk/p/9193351.html (2)容器: https://www.cnblogs.com/coderland/p/5902725.html https://www.cnblogs.com/cxq0017/p/6555533.html (3)malloc https://blog....

qq_31648921的博客 1049

LeetCode每日 - 剑指 Offer 20. 表示数值的字符串

目:剑指 Offer 20. 表示数值的字符串 Description 请实现一个函数用来判断字符串是否表示数值(包括数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。 Solution 划水划水 记录一下wa了12次的!!! 这建议是真的真的很无聊才去做!!! AC Code 无参考价值 class Solution { public:

叶子的小本本 167

计算机专业的学生需要每天吗?

华为OD算法/大厂面试高频算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!课程讲师为全网50w+粉丝编程博主@吴师兄学算法以及小红书头部编程博主@闭着眼睛学数理化每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典,200+华为OD真/大厂真,还有简历修改、模拟面试、专属HR对接将为你解锁可上全网独家的欧弟OJ系统练习华子OD、大厂真可查看链接。

weixin_48157259的博客 920

【Android春招每日一练】(四) 剑指4+Java基础

文章目录概览剑指offer1.13 剪绳子Ⅱ1.14 二进制中1的个数1.15 数值数次1.16 打印1到最大的n位数(考虑大数)Java基础2.8 Java抽象类和接口的区别2.9 浅拷贝和深拷贝2.10 Java序列化2.11 Java finally与return执行顺序2.12 Java传值还是传址总结 概览 剑指offer:剪绳子Ⅱ、二进制中1的个数、数值数次、打印1到最大的n位数(考虑大数) Java基础:Java抽象类和接口的区别、浅拷贝和深拷贝、Java序列化、Java fina

z18223345669的博客 740

【乱序版 ● 剑指offer每日算法打卡解——位运算 (号15,16,65)

打卡day15 目 录第一剑指 Offer 16. 数值数次第二剑指 Offer 15. 二进制中1的个数第三剑指 Offer 65. 不用加减乘除做加法 第一剑指 Offer 16. 数值数次 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问。 示例 1: 输入:x = 2.00000, n = 10 输出:1024.00000 示例 2: 输入:x = 2.10000, n = 3 输出:9.26100 示

此心安处 256

Leetcode 剑指 Offer 20 表示数值的字符串

目录LeetCode : 剑指 Offer 20 表示数值的字符串目描述解 LeetCode : 剑指 Offer 20 表示数值的字符串 目描述 请实现一个函数用来判断字符串是否表示数值(包括数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。 解      class Solution { public: bool isNumber

s_Shune 127

[剑指offer]解汇总与目种类分类(C++纯享版!)

剑指offer大全写在前面解表默写遇错集JT4---重建二叉树JT12---数值数次JT14---链表中倒数第k个结点目分类表月打卡与心得 写在前面 一般来说对于剑指offer分为几,不懂直接解,获得正解。 默,看一遍解,进行默写,进行巩固 日每日三省吾身,隔日能更进一步 月,在完成全部目后,要时不时的进行回顾“思而不学则殆”,要一直动起来,起来,速度更是要快。“百变,其意必现” 最后,我们才可以更多更有难度的,但是万变不离其宗,最简单的剑指off

あなたの可愛い41 619

【吐血理】LeetCode剑指Offer百道经典解总结

本文理了LeetCode剑指Offer中百余道经典的目,理出了数组、字符串、链表、二叉树、栈、回溯、动态规划、位运算中的经典问以及问对应的链接地址和个人提供的解,便查阅以及练习。以下是百的索引,点击即可找到目的出处并练习,也可直接查阅答案。 建议刚开始的朋友直接按一下的Tag分类一个专一个专地进行学习与作答,完全理解这一百,一线大厂非你莫属。

BoringError的博客 3856

【Android春招每日一练】(五) 剑指4+Java并发

文章目录概览剑指offer1.17 删除链表节点1.18 正则表达式匹配1.19 表示数值的字符串(有限状态机)1.20 调数组奇偶数Java并发2.13 Java创建线程三种式2.14 Java线程池2.15 死锁2.16 synchronized/ReentrantLock2.17 线程间通信的两种式总结 概览 剑指offer:删除链表节点、正则表达式匹配、表示数值的字符串、调数组奇偶数 Java并发:Java创建线程三种式、Java线程池、死锁、synchronized/ReentrantL

z18223345669的博客 873

leetcode 56合并区间

这道你可以把它压缩成一个非常好记的思路:先排序,再逐个比较;能合并就扩右边界,不能合并就加入答案。具体来说,先用: 把所有区间按照左端点从小到大排序。排序之后,我们只需要拿“当前区间”和 里最后一个已经合并好的区间比较。如果: 说明前一个区间的右端点比当前区间左端点还小,二者没有重叠: 所以直接: 如果不满足: 那就说明: 两个区间重叠,例如: 此时左端点不用动,只需要把右端点扩大: 所以可以记成: 这道容易忘的函数/语法 含义:对个 排序。对于:

qq_63176310的博客 229
上一篇: GO语言中接口和接口型函数的使用
下一篇: 如何避免缓存击穿?使用GO语言实现sliglefight
雨雨不怕雨
博客等级 码龄11年 39粉丝 · 52原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨雨不怕雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值