LeetCode 326. Power of Three (简单题的四种求解方式)

[LeetCode]--326. 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?Credits: Special thanks to @dietpepsi for adding this problem a 阅读详情

简介

题目链接 LeetCode 326. Power of Three

本题的标签是Math,有多种数学的实现方法,一起看看吧。

注意:文章中一切注解皆为Python代码

理解题目

题目非常简单,判断一个数是不是3的幂。

题目剖析+思考过程

最简单的方法,暴力求解,让n一直除以3,直到得到小于3的数为止。还有什么数学解法呢?显然用log也可以。那么我们先给出这两种解法,然后再看看其他新奇的解法。

代码实现(附注释)

解法一:暴力求解

太直白,就不解释了

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        while n >= 3 and n % 3 == 0:
            n //= 3
        return n == 1

解法二:暴力求解的优化

一点点优化,对于比较大的数更好用;一直在增大k(这里k=3^i,i > 0),直到不能被整除,再慢慢变回3。

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        k = 3
        while n >= 3:
            if n % k == 0:
                n //= k
                k *= 3
            elif k > 3: k //= 3
            else: return False
        return n == 1

解法三:数学解法(移项log)

如果3^k == n,那么k == log(n) / log(3),只要k是整数就说明n是3的幂

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        if n <= 0: return False
        k = log(n, 3)
        return abs(k - round(k)) < 1e-10

解法四:位运算

我们都知道,在二进制中,2的幂的表示方式都是10…0(1后面接k个0),例如:

  • 2^0 = 1 = int('1', 2)
  • 2^1 = 2 = int('10', 2)
  • 2^2 = 4 = int('100', 2)

但你可能没有去想过,这样的形式对三进制也是成立的,比如:

  • 3^0 = 1 = int('1', 3)
  • 3^1 = 3 = int('10', 3)
  • 3^2 = 9 = int('100', 3)

因此,我们只需要找出n的三进制表达式,并且判断它是否符合1后面接k个0这种模式(pattern)就可以了。

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        ans = []
        while n > 0:
            ans.append(n % 3)
            n //= 3
        return ans and ans[-1] == 1 and sum(ans[:-1]) == 0

这种方法时间复杂度和暴力解法没什么区别,上述代码甚至还要更慢一些,但是思想是非常独特的,这里就提一下。

解法五:质数的数学性质

这个方法就更另类了,我们一直都在想让n整除3取判断到底是不是3的幂,有没有想过有些数整除n也可以判断它是3的幂?

首先我们要知道,对于3^k这样一个数,它的因数全都是3的幂(1除外),因此我们只需要找到一个数3^k,并确保它大于n,在判断n是不是3^k的因数就好。

为了找到足够大的3的幂,我们可以用int(log(2**31-1, 3)),代码如下

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        return n > 0 and 3**int(log(2**31-1, 3)) % n == 0

这种解法和解法三的数学移向也没什么太大区别,但是利用底数为质数的最大幂数来求解的思想很新颖。

解题后的思考

小小的一题,有这么多种有趣的解法,每个解法各有特色,灵活运用数学才可以创造出更多有趣的解法。

DQN网络代码调用env.reset()后存储观测信息报错问题ValueError: setting an array element with a sequence.解决处理 **reset()函数返回的是一个array类型以及其中数据的type!模拟游戏进行学习任务。因此需要将observation指定为真正需要的array信息即可,得到的的变量observation类型与Agent存储时的。因此怀疑返回的observation有问题,于是通过。报错信息提示为数据维度不对应,也即最初通过。在强化学习DQN网络代码实现过程中,针对。 阅读详情

相关推荐

STM32H750VBT6在Keil5下载报错?三步搞定Flash Download Failed Cortex-M7问题

本文针对STM32H750VBT6在Keil5开发环境中常见的“Flash Download Failed Cortex-M7”下载报错问题,提供了系统性的三步解决方案。核心在于理解该芯片128KB内部Flash的特殊性,并详细指导用户检查更新Device Pack、精确配置Flash下载算法地址(0x08000000, 0x20000)以及进行硬件连接验证,从而快速修复调试器与芯片间的Flash操作协议问题。

weixin_29274969的博客 480

LeetCode知识点总结 - 326

LeetCode 326. Power of Three 考点 难度 Recursion Easy 题目 Given an integer n, return true if it is a power of three. Otherwise, return false. An integer n is a power of three, if there exists an integer x such that n == 3x. 思路 反复除以三,余数不为0返回false。 答案 p

m0_59773145的博客 255

无需UMAT:基于Abaqus内置模型实现形状记忆聚合物结构的热-力耦合仿真

本文详细介绍了如何利用Abaqus内置模型实现形状记忆聚合物(SMP)的热-力耦合仿真,无需编写复杂的UMAT子程序。通过广义Maxwell模型和Neo-Hookean模型的组合应用,结合完整的热-力耦合分析流程,帮助工程师高效模拟SMP的形状记忆行为。文章还提供了工程应用案例和常见问题解决方案,为相关领域的研究和设计提供实用指导。

weixin_34005090的博客 117

leetcode_326(3的次方判断)

次方判断

yeal 3777

2024年中科大分子生物研究生考试建议

分子生物学复习资料及往年考题。

qq_43337249的博客 2954

ESXI 8.0虚拟机安装OpenWRT软路由详细教程

OpenWrt 是嵌入式的 Linux 路由器固件,OpenWrt在稳定运行的同时提供了强大的扩展能力,用户可以完全的定制属于自己的路由系统,满足不一样的个性化需求,本文讲解如何使用ESXI安装OpenWRT,打造属于自己的软路由。本次安装使用的是版本。默认登录信息:用户:root密码:password下载固件:https://github.com/haiibo/OpenWrt/releases/tag/X86_64【CPU配置】:4核心。

qq_27121281的博客 3915

LeetCode 1829. Maximum XOR for Each Query (熟悉xor操作就是简单题,不熟悉就懵了)

LeetCode 1829. Maximum XOR for Each Query: 异或没什么难的,难的是你能不能通过题目的输入范围想出适合解题的异或属性——异或不能增加二进制表示下的最大位数,因此最大值可以确定

tech_zwl的博客 5068

二叉树的操作之统计二叉树中节点的个数

一,问题描述 给定一颗二叉树,已知其根结点。 ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数   二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现。 ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中节点的个数 借助遍历二叉树的思路,每访问一个结...

weixin_34200628的博客 4568

leetcode1829.每个查询的最大异或值(中等)

难点: 1:用数组存前缀异或 2:使得异或值最大,也就是^所有bit都相反的一个数,由于k小于2的maximumbit位,所以最大值只能是最后maximumbit全为1。 3:^ 1进行每位翻转,^ 0每位不变。即k为pre[i]后maximumbit位全是相反的数,前面所有的位不变,也就是pre[i]^(1 << maximumbit - 1)。 class Solution { public: vector<int> getMaximumXor(vector<...

zhangjiaji111的博客 281

机器人控制仿真软件:MATLAB Simulink Control System Toolbox_(1).MATLAB基础知识

MATLAB(Matrix Laboratory)是由MathWorks公司开发的一种高性能数值计算和可视化软件。它广泛应用于科学计算、工程设计、信号处理、控制系统设计、图像处理等领域。强大的矩阵运算能力:MATLAB的核心是矩阵运算,能够高效处理大规模的数值数据。丰富的工具箱:MATLAB提供了大量的工具箱,如Control System Toolbox、Simulink、Signal Processing Toolbox等,这些工具箱覆盖了多个应用领域。易于使用的图形界面。

kkchenjj的博客 906

使用n8n搭建服务器监控系统:从Webhook到Telegram告警的完整实现

本文介绍基于n8n工作流平台搭建轻量级服务器监控系统的完整方案,通过Webhook接收监控数据、Token认证、阈值检查和Telegram告警推送,实现7x24小时自动化监控。整个系统由7个可视化节点组成,支持CPU、内存、磁盘、网络流量等多维度指标监控,告警阈值可灵活配置。相比传统的Prometheus或Zabbix方案,配置更简单、资源消耗更低,适合1-50台中小规模服务器的监控需求。实测表明从部署到上线仅需30分钟,告警响应延迟小于1秒,完全满足生产环境要求。

todoitbo的博客 1万+

Leetcode 5719:每个查询的最大异或值

题目描述 给你一个 有序数组nums,它由n个非负整数组成,同时给你一个整数maximumBit。你需要执行以下查询 n次: 找到一个非负整数k < 2maximumBit,使得nums[0] XOR nums[1] XOR ... XOR nums[nums.length-1] XOR k的结果 最大化。k是第 i个查询的答案。 从当前数组nums删除最后一个元素。 请你返回一个数组answer,其中answer[i]是第i个查询的结果。 ...

weixin_35338624的博客 273

46、大数据助力SDN优化流量管理与控制器

本文探讨了大数据在软件定义网络(SDN)中的应用,重点分析了如何利用大数据技术优化SDN控制器的可扩展性和弹性。通过介绍SDN控制器的核心功能及其面临的挑战,提出了集中式、分布式、混合式和分层式控制器放置策略,并结合大数据分析系统架构与技术,详细阐述了在控制器放置优化、流聚合和备份路径识别等场景中的实际应用。文章还给出了大数据分析在SDN控制器优化中的操作流程与优势,展望了未来结合人工智能与物联网的发展方向,强调了数据安全与算法效率的重要性。

xx56789的博客 86

【LeetCode】326. Power of Three (优雅的数学解法)

QuestionGiven 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? SolutionThis can be generalized for any 【prime】 number

jiange_zh的博客 1717

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LeetCode-326. Power of Three [C++][Java]

Given an integern, returntrueif it is a power of three. Otherwise, returnfalse. An integernis a power of three, if there exists an integerxsuch thatn == 3x.

贫道绝缘子的博客 1088

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LeetCode 326. Power of Three 解题报告

LeetCode 326. Power of Three 解题报告

骆小坑的填坑之旅 767

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

leetcode解题之231# Power of Two&326. Power of Three Java版 (判断是否为2,或者3 的幂)

leetcode解题之231# Power of Two Java版 (判断是否为2的幂) 326. Power of Three

mine_song的博客 395

power of three java_LeetCode - Easy - 326. Power of Three

LeetCode - Easy - 326. Power of ThreeTopicMathDescriptionGiven an integer n, return true if it is a power of three. Otherwise, return false.An integer n is a power of three, if there exists an integer...

weixin_28684757的博客 186

LeetCode 326 Power of Three(3的幂)(递归、Log函数)

翻译给定一个整型数,写一个函数决定它是否是3的幂(翻译可能不太合适……跟进: 你是否可以不用任何循环或递归来完成。原文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?分析题意我其

nomasp 6863

LeetCode //C - 326. Power of Three

【代码】LeetCode //C - 326. Power of Three。

Made in Code 765

[LeetCode]326. Power of Three

[LeetCode]326. Power of Three题目描述思路简单循环代码循环 暴力解 非循环 找出整数中最大的3的指数的数,则满足是三的指数的数,对他取模为0class Solution { public: bool isPowerOfThree(int n) { if (n == 0) return false; wh

Lcharon的博客 632

LeetCode 326. Power of Three【迭代/打表/数学】简单

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。 为了方便在PC上运行调试、分享代码文件,我还建立了相关的仓库:https://github.com/memcpy0/LeetCode-Conqu.

memcpy0的博客 467

Leetcode 326. Power of Three

原文链接:https://blog.csdn.net/mobius_strip/article/details/146445289。

小白菜又菜 395

LeetCode 第 326 题 (Power of Three)

LeetCode 第 326 题 (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? 这道题的常规的思路是不停的除以 3,如果能

Ivan 的专栏 1308

326. Power of Three [easy] (Python)

题目链接https://leetcode.com/problems/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?

Coder_Orz的博客 3850

LeetCode笔记:326. Power of Three

判断一个整数是否是3的次方数

Minecraft 1837
上一篇: 工作笔记:如何用Django连接Kerberized甲骨文(Oracle)数据库
下一篇: LeetCode 294. Flip Game II (你给翻译翻译,什么叫做guarantee?)
tech_zwl
博客等级 码龄6年 1粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值