• 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;
        }
    }
    
  • 相关阅读:
    Swift中函数
    Swift 中的开关语句switch在swift中的使用
    Swift 函数新特性
    Swift 学习-多线程
    安卓学习
    ios -网络
    ios 中block
    Lua 简易调试
    iOS、Cocos2dx、Unity3D下的坐标系统简介
    Lua开发过程中遇到的一些小问题
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072605.html
Copyright © 2020-2023  润新知