326. Power of Three

来源:互联网 发布:尤里的复仇核弹数据 编辑:程序博客网 时间:2024/06/05 03:23

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?

s思路:
1. 看是否3的指数,即判断n==3^i。直接的方法就是每次和3求余,如果为0,就除以3,看是否等于1.
2. 但这么一来,就太简单了,题目要求不用loop不用recursion. 也就是说要我们不能从detail入手,一步一步来判断了,需要从top-down的系统角度看问题,比如:从数学的角度看,能否用数学公式直接判断。
3. 以为有啥高深的数学,看答案发现还是一个考察边界的问题,用int可以表示的最大的3^i来和给的数求余数,如果余数为0,说明能整除,那么这个给的数就一定也能表示成3^j.太妙!
4. 看来边界问题就是一个根本问题,解决了各种边界,比如:32bit长,最大的可表示的数等都是边界,就要敢想才行!

class Solution {public:    bool isPowerOfThree(int n) {        //        if(n<=0) return false;        return !(1162261467%n);//1162261467=3^19    }};
0 0
原创粉丝点击