326. Power of Three(C++)
来源:互联网 发布:linux 查看登陆信息 编辑:程序博客网 时间:2024/06/04 18:32
题目:
Given an integer, write a function to determine if it is a power of three.
给一个整数,判断它是不是3的幂数
Follow up:
Could you do it without using any loop / recursion?
不用循环或递归写出这个方法
解答:
最简单的:
用循环/注意判断0特殊值
class Solution {public: bool isPowerOfThree(int n) { if(n==0)return false; while(n%3==0)n/=3; return n==1;}};
思考:不用循环或递归:如果想一下子做出来的话,可以翻转想法,不要总想着用这个数除以3(或者利用各个位子上的数求和除以三余0就是三的倍数),因为总要除好多个三,想想三的幂数的特点:往大处想,3的n次幂一定是3的k次幂的因子(k>n),而且3的k次幂只有3这一个质因子,那么判断一个数是否是三的幂数只要用一个很大的(3的k次方(k很大))数除以这个数,如果余数为零就正确。因为题目给出的n使int类型,那么只要找到大于等于int边界那个数(3^k)就好了。这个数需要测试出来(只需要写一个小程序试一试)
我的执杖测试程序:
#include<iostream>using namespace std;int main(){ int n,k=1; cin>>n; for(int i=0;i<n;i++){ k=k*3; } cout<<k; return 0;}
(初始试的时候因为int边界是2^31,我就没什么根据的试了个3^20 (31*(2/3)),于是很快就锁定了19)
得到当幂数为19是临界值为1162261467。(输入20会产生溢出得到一个负值)
于是就可以欢快的写方法了:
bool isPowerOfThree(int n) { if(n<=0)return false; return 1162261467%n==0;}
//注意小于0的情况,第一个方法可行是因为负数的话会输出-1,但这个是不会,负数是不符合条件的。
0 0
- 326. Power of Three(C++)
- [leetcode]326. Power of Three(c语言)
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- 326. Power of Three
- JVM学习笔记(二)------Java代码编译和执行的整个过程
- PHP 表单验证
- JQuery的Ajax实现+SpringMVC
- 雨的印记
- ubuntu install chrome
- 326. Power of Three(C++)
- 一周热门电影20170510
- 地道美语听力播客 2
- 找寻链表中环的入口结点
- Intersection of Two Arrays II
- JAVA按位运算
- 逆序数
- 接口,抽象类以及它们的区别
- (ssl1000)P1001 A+B Problem(c++)