zoukankan      html  css  js  c++  java
  • 【LeetCode-数学】3的幂

    题目描述

    给定一个整数,写一个函数来判断它是否是 3 的幂次方。
    示例:

    输入: 27
    输出: true
    
    输入: 45
    输出: false
    

    进阶: 你能不使用循环或者递归来完成本题吗?
    题目链接: https://leetcode-cn.com/problems/power-of-three/

    思路1

    将 n/3,如果最后能的结果为 3,则说明 n 是 3 的幂,返回 true,否则返回 false。在每次 n 除以 3 之前,还要判断 n 能不能被 3 整除,如果不能直接返回 false。

    代码如下:

    class Solution {
    public:
        bool isPowerOfThree(int n) {
            if(n==1 || n==3) return true;
    
            while(n>=3){
                if(n%3!=0) return false;
                if(n==3) return true;
                n /= 3;
            }
            return false;
        }
    };
    

    思路2

    如果 n 是 3 的幂,则有

    [n = 3^a \ log n = a log 3 \ a = frac{log n}{log 3} ]

    根据上面的公式计算 a,如果 n 是 3 的幂,则 a 是整数,否则 a 不是整数。

    class Solution {
    public:
        bool isPowerOfThree(int n) {
            if(n<=0) return false;
            
            double a = log10(n) / log10(3);
            return a==floor(a);
        }
    };
    
  • 相关阅读:
    Codeforces #364 DIV2
    uva10635 LIS
    hdu3714 三分找最值
    【转】三分查找
    NBUT 1457 莫队算法 离散化
    HYSBZ 2038 莫队算法
    莫队算法
    poj3417 LCA + 树形dp
    hdu3087 LCA + 暴力
    hdu2874 LCA在线算法
  • 原文地址:https://www.cnblogs.com/flix/p/13323508.html
Copyright © 2011-2022 走看看