Leetcode:326. 3的幂

Leetcode:326. 3的幂

题目描述

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

示例 1:

输入: 27
输出: true

示例 2:

输入: 0
输出: false

示例 3:

输入: 9
输出: true

示例 4:

输入: 45
输出: false

进阶:

你能不使用循环或者递归来完成本题吗?

思路

思路1 直接循环取模

如果模3为0,则除以3,最后判断数是否为1

思路2 转换为3为基底,然后匹配字符串以1开头

使用Java基底转换函数,然后字符串匹配是否以1为开头

思路3 使用以3为基底的最大整数对n取余

若余数为零则n是以3为底

代码

代码1

class Solution {
    public boolean isPowerOfThree(int n) {
        if (n < 1){
            return false;
        }
        while (n % 3 == 0 && n != 0){
            n /= 3;
        }
        return n == 1;
    }
}

代码2

class Solution {
    public boolean isPowerOfThree(int n) {
        if (n < 1){
            return false;
        }
        return Integer.toString(n, 3).matches("^10*$");
    }
}

代码3

class Solution {
    public boolean isPowerOfThree(int n) {
        if (n < 1){
            return false;
        }
        return n > 0 && 1162261467 % n == 0;
    }
}

复杂度分析

思路1时间复杂度

$O(logn)$

思路1空间复杂度

$O(1)$

思路2时间复杂度

$O(logn)$

思路2空间复杂度

$O(1)$

思路3时间复杂度

$O(1)$

思路3空间复杂度

$O(1)$


文章作者: 小风雷
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小风雷 !
评论
 上一篇
Leetcode:202. 快乐数 Leetcode:202. 快乐数
Leetcode:202. 快乐数题目描述编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到
2020-05-07
下一篇 
Leetcode:268. 缺失数字 Leetcode:268. 缺失数字
Leetcode:268. 缺失数字题目描述给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。 示例 1:输入: [3,0,1] 输出: 2 示例 2:输入: [9,6,4
2020-05-06
  目录