zoukankan      html  css  js  c++  java
  • 326. Power of Three

    原题链接:https://leetcode.com/problems/power-of-three/description/
    实现如下:

    /**
     * Created by clearbug on 2018/2/26.
     */
    public class Solution {
    
        public static void main(String[] args) {
            Solution s = new Solution();
            System.out.println(s.isPowerOfThree(13));
            System.out.println(s.isPowerOfThree(6561));
        }
    
        /**
         * 官方解答四:利用了整数的上限
         *
         * Submission Detail: 64.78%
         * Runtime: 71 ms
         *
         * 时间复杂度:O(1)
         * 空间复杂度:O(1)
         *
         * @param n
         * @return
         */
        public boolean isPowerOfThree(int n) {
            return n > 0 && 1162261467 % n == 0;
        }
    
        // 官方解答三:使用了数学上的公式,并且还要处理编程语言中的误差。这个方法我没看太懂,这里就不说了
    
        /**
         * 官方解答二:使用进制转换
         *
         * Submission Detail: 2.38%
         * Runtime: 133 ms
         *
         * 时间复杂度:O(log3n), 这个取决于 Integer.toString 方法的内部实现啦
         * 空间复杂度:O(log3n)
         *
         * @param n
         * @return
         */
        public boolean isPowerOfThree3(int n) {
            if (n < 1) {
                return false;
            }
    
            return Integer.toString(n, 3).matches("^10*$");
        }
    
        /**
         * 官方解答一:直接使用循环取余、做除法来解决的,很显然这种方法效率不高,并且题目中提到了不要用循环了
         *
         * Submission Detail: 61.85%
         * Runtime: 73 ms
         *
         * 时间复杂度:O(log3n)
         * 空间复杂度:O(1)
         *
         * @param n
         * @return
         */
        public boolean isPowerOfThree2(int n) {
            if (n < 1) {
                return false;
            }
    
            while (n % 3 == 0) {
                n = n / 3;
            }
    
            return n == 1;
        }
    
        /**
         * 1, 3, 9, 27, 81, 243, 729, 2187, 6516... 我以为我已经发现了这个问题的诀窍所在了,谁知我却是大错特错的!比如 21 就直接把我的
         * 解法摧垮了!无奈了,只能去看官方解答了。。。
         *
         * @param n
         * @return
         */
        public boolean isPowerOfThree1(int n) {
            int module = n % 10;
            return (module == 1 || module == 3 || module == 9 || module == 7)
                    && n % 3 == 0;
        }
    
    }
    
  • 相关阅读:
    PL/SQL Developer 远程连接Oracle数据库
    常用js代码学习
    三元运算 多条件嵌套
    在后台CS文件里面,隐藏和显示Repeater里面控件
    最小二乘线性及平面拟合原理及C++实现
    C++的顶层const 和 底层const
    vs2019上遇到的一个未预指定引用函数的静态库导致的问题
    一个基础QItemDelegate检查器类
    linux 基础命令及快捷键
    lambda表达式
  • 原文地址:https://www.cnblogs.com/optor/p/8746945.html
Copyright © 2011-2022 走看看