前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-326-Power of Three

leetcode-326-Power of Three

作者头像
chenjx85
发布2019-03-14 17:13:24
4160
发布2019-03-14 17:13:24
举报

题目描述:

Given an integer, write a function to determine if it is a power of three.

Example 1:

代码语言:javascript
复制
Input: 27
Output: true

Example 2:

代码语言:javascript
复制
Input: 0
Output: false

Example 3:

代码语言:javascript
复制
Input: 9
Output: true

Example 4:

代码语言:javascript
复制
Input: 45
Output: false

Follow up: Could you do it without using any loop / recursion?

要完成的函数:

bool isPowerOfThree(int n) 

说明:

1、这道题给定一个整数n,要求判断n是不是3的整数次幂,比如27是3的3次幂,81是3的4次幂,这些都要返回true。尽量不用循环或递归来完成。

2、循环或递归的做法比较容易实现,这里就不列举出来了,就是不断地除以3,直到最后为1就返回true,不然就返回false。

笔者最开始想到log的方法,log3(n)如果为整数,那么就返回true。但后来想到log的实现,其实也是泰勒展开,循环计算,也是很费时间的。

之后想到了之前做过的题目。在int型整数,一共32位里面,3的整数次幂最大是3^19,所以用3^19%n==0来判断。如果能整除的话,说明n的因子都是3,所以n是3的整数次幂。

代码如下:

代码语言:javascript
复制
    bool isPowerOfThree(int n) 
    {
       if(n<=0||n>1162261467)
           return false;
        return !(1162261467%n);
    }

如果n小于等于0或者大于3^19,那么返回false。如果大于0,那么判断能不能用3^19来整除,如果可以就返回true,如果不行就返回false。

上述代码实测78ms,beats 71.76% of cpp submissions。

笔者还看到了有人列举出了所有的(3^19之内)3的整数次幂,然后逐个判断,也是有点神奇。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 要完成的函数:
  • 说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档