递归和分治 Leetcode刷题集合

参考博文:
1、从零开始学递归与分治 (作者:houjingyi233)
2、leetcode–递归、回溯和分治 (作者:xiayto)
3、leetcode刷题总结之递归 (作者:algsup)

还可以看一下我之前写的关于DFS的博客,加深对递归的理解:
1、深度优先算法DFS入门 (超级简单的例题入门)
2、深度优先算法(二) 一些例题加深对DFS的理解

分治问题,由**“分”(divide)“治”(conquer)两部分组成,通过把原问题分为子问题**,再将子问题进行处理合并,从而实现对原问题的求解。
归并排序就是典型的分治问题,其中“分”即为把大数组平均分成两个小数组,通过递归实现,最终我们会得到多个长度为 1 的子数组;“治”即为把已经排好序的两个小数组合成为一个排好序的大数组,从长度为 1 的子数组开始,最终合成一个大数组。

一、50. Pow(x, n)

原题链接:https://leetcode-cn.com/problems/powx-n/

实现 pow(x, n) ,即计算 x 的 n 次幂函数。

示例 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 位有符号整数,其数值范围是 [−231, 231 − 1] 。

解题思路:

主要是注意n的正负,这个题比较简单了,直接递归调用就行:
如果 n 是负数,那么相当于求 (1/x)^(-n)。
如果 n 是正数 且 奇数,那么结果需要单独乘以 x
如果 n 是正数 且 偶数,求(x2)(n/2),一直递归下去即可。
时间复杂度是O(1),空间复杂度是O(1)。
**个人觉得,这个代码是O(1),因为n只有32位,循环次数是有上限的常数。

runtime error: negation of -2147483648 cannot be represented in type ‘int’; cast to an unsigned type to negate this value to itself (solution.cpp)

解决方法:把int改为long long

class Solution {
   
public:
    double myPow(double x, long long n) {
   
        if(n==0) return 1; // n=0直接返回1
        if(n==1) return x; 

        if
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值