《leetCode》:Power of Three
2016-03-20 15:57
477 查看
题目
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?
思路一:不能AC
开始由于没有想到好的思路,因此,想着要不利用循环来做下,即利用循环把3的所有次方均从小到大求一次并与n进行比对。以下代码思路报 内存错误。
public boolean isPowerOfThree(int n) { if(n<=0){ return false; } List<Integer> list=new ArrayList<Integer>(); list.add(1); while(true){ int temp=list.get(list.size()-1)*3; if(temp>Integer.MAX_VALUE){ break; } list.add(temp); } if(list.contains(n)){ return true; } return false; }
想着不用存储也行呀,然后就有了如下的代码;当n=2147483647报超时错误。
public boolean isPowerOfThree(int n) { if(n<=0){ return false; } if(n==1){ return true; } int res=1; while(true){ res=res*3; if(res>Integer.MAX_VALUE||res>n){ break; } if(res==n){ return true; } } return false; }
呜呜,因此,也就只能想其它办法了。
思路二
在讨论组,看了下别人的代码,发现了如下思路;找出在int范范围内最大的3次方的值maxValue,然后判断maxValue与n的余数是否为零,如果为零,则说明为3的次方。
public boolean isPowerOfThree(int n) { if(n<=0){ return false; } int max3PowerValue= 1162261467; // 3^19, int maxInt= 1162261467; // 2^31-1; return max3PowerValue%n==0; }
此思路虽然AC了,但是,和上面两种没有AC的方法区别不大。
相关文章推荐
- LeetCode-80-Remove Duplicates from Sorted Array II(递归)-Medium
- IOS自动布局之Autoresizing
- 【边喝caffee边Caffe 】(一)Caffe的安装
- 猎豹MFC--对话框 静态文本 编辑框 按钮 对话框 访问控件
- UITableView增加搜素框后搜不出来内容(old)
- hdu2037 今年暑假不AC
- myeclipse的buildpath 和lib引入的区别
- 浅谈HTTP中Get与Post的区别【转】
- 算法-99乘法表
- JDBC
- 爬取joomla漏洞库中存在利用代码的链接
- HTML 图片热点与表单
- DirectUI开源项目网站
- Android 5.0 动画-Ripple和RevealEffect
- TabLayout+ViewPage+Fragment的使用
- Problem M
- 猎豹MFC--书籍推荐:基于对话框的MFC应用程序《VisualC++实例精通》单文档多文档多顶级文档《MFCWindows程序设计》
- Effective Java2读书笔记-类和接口(四)
- 二叉树的最大深度 & 二叉树的最小深度
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) D. Delivery Bears 二分+网络流