zoukankan      html  css  js  c++  java
  • leetcode326(3的幂)

    题目如下

    给定一个整数,写一个函数来判断它是否是 3 的幂次方。
    
    示例 1:
    
    输入: 27
    输出: true
    示例 2:
    
    输入: 0
    输出: false
    示例 3:
    
    输入: 9
    输出: true
    示例 4:
    
    输入: 45
    输出: false
    进阶:
    你能不使用循环或者递归来完成本题吗?
    

    最简单解法当然是O(n)O(n),直接使用顺序遍历查找,就不写代码了。
    重点关注的是如何找出O(1)O(1)的算法,代码如下
    就是假设xlog(3)=log(n)xlog(3)=log(n),解出x就可以了,但是需要注意的是java里面的精度,Java使用log之后会有精度损失,比如n为243的时候,x的解是4.9999999,而不是5,于是我们需要对答案精度一定程度的处理,相当于当x非常接近一个整数的时候,就判断他是我们需要的解。

    class Solution {
        private static final  double epsion = 10e-15;
        public boolean isPowerOfThree(int n) {
         	double res = Math.log(n)/Math.log(3);
            //floor返回不大于的最大整数,ceil返回不小于的最大整数
            return Math.abs(res - Math.round(res)) < epsion;
        }
    }
    
  • 相关阅读:
    网络编程
    反射函数与元类
    面向对象进阶
    对象的封装与接口
    对象继承
    面向对象
    包,logging模块与haslib模块
    闭包函数及装饰器
    函数对象、函数的嵌套、名称空间及作用域
    函数简介及函数参数介绍
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072605.html
Copyright © 2011-2022 走看看