3的幂[递归/循环

阅读: 评论:0

3的幂[递归/循环

3的幂[递归/循环

3的幂

  • 前言
  • 一、3的幂
  • 二、直接法 & 数学法
    • 1、递归与循环
    • 2、3的最大幂与约数
  • 总结
  • 参考文献

前言

3的幂,可不断除3来判定一个数是否为3的幂,有两种方式,一种递归判定,没有循环结构,代码简单&速度稍快,就是需要函数栈的内存开销;而递归的方式稍慢,但是代码容易理解 & 没有函数栈的内存开销。除此之外,能数学化,是解题的最高境界(当可以数学化时),而通过拿到3的最大幂来对n进行取余,就可以知道该数是否为3的幂。

一、3的幂

二、直接法 & 数学法

1、递归与循环

// 3的幂
public class IsPowerOfThree {/*1-可不断的对3取商,来判定是否是3的幂,即n = 3 ^x^;*/// 递归版 :测试结果,递归还是比循环稍快。public boolean isPowerOfThree(int n) {if (n == 1) return true;if (n <= 0 || n % 3 != 0) return false;if (n / 3 == 1) return true;return isPowerOfThree(n / 3);}// 循环版public boolean isPowerOfThree2(int n) {if (n <= 0) return false;while (n > 0) {if (n == 1) return true;if (n % 3 != 0) return false;n /= 3;}return false;}
}

2、3的最大幂与约数

// 进阶:不使用递归/循环完成。
class IsPowerOfThree2 {/*不使用循环/递归,就必须挖掘到和3/幂相关的特性,用数学/位运算一步到位那种。core:找到3的最大幂数,如果n是其公约数,那么n一定是3的幂。*/public boolean isPowerOfThree(int n) {int max_int_power_3 = 1162261467;return n > 0 && max_int_power_3 % n == 0;}
}

总结

1)3的幂,锻炼典型的递归 & 循环。

2)将问题数学化,大大降低时间复杂度,了解幂数和约数。

参考文献

[1] LeetCode 3的幂

本文发布于:2024-01-31 21:44:04,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170670864631557.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:递归
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23