Leetcode: Power of Three
Given an integer, write a function to determine if it is a power of three. Follow up: Could you do it without using any loop / recursion?
Recursion:
1 public class Solution { 2 public boolean isPowerOfThree(int n) { 3 if (n <= 0) return false; 4 if (n == 1) return true; 5 else if (n%3 == 0) return isPowerOfThree(n/3); 6 else return false; 7 } 8 }
Iteration:
1 public class Solution { 2 public boolean isPowerOfThree(int n) { 3 if (n <= 0) return false; 4 while (n != 1) { 5 if (n%3 != 0) break; 6 n /= 3; 7 } 8 return n==1; 9 } 10 }
Math: https://leetcode.com/discuss/78532/a-summary-of-all-solutions
It's all about MATH...
Method 1
Find the maximum integer that is a power of 3 and check if it is a multiple of the given input. (related post)
1 public boolean isPowerOfThree(int n) { 2 return n>0 && Math.pow(3, (int)(Math.log(0x7fffffff)/Math.log(3)))%n==0; 3 }
Note that
Math.pow(3, (int)(Math.log(0x7fffffff)/Math.log(3)))
returns the maximum integer that is a power of 3
Method 2
If log10(n) / log10(3)
returns an int, then n is a power of 3. (original post). But be careful here, you cannot use log
(natural log) here, because it will generate round off error.
1 public boolean isPowerOfThree(int n) { 3 return (Math.log10(n) / Math.log10(3)) % 1 == 0; 5 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架