LeetCode 326 Power of Three(3的幂)(递归、Log函数)

翻译

给定一个整型数,写一个函数决定它是否是3的幂(翻译可能不太合适……

跟进:
你是否可以不用任何循环或递归来完成。

原文

Given an integer, write a function to determine if it is a power of three.

Follow up:
Could you do it without using any loop / recursion?

分析

题意我其实不是满懂,比如说12到底可不可以呢?还是说只有:3、9、27、81这种才行呢?先写个简单的递归试试看吧。

bool isPowerOfThree(int n) {
    if (n == 1) return true;
    else if (n == 0) return false;
    else if (n % 3 == 0)
        return isPowerOfThree(n / 3);
    else return false;
}

提交成功了,那么自己用12作为参数来试试呢,发现返回false,那么就可以断定题意是上面我说的第二种了。

是否还记得log函数呢,之前有一道题遇到过,所以这次一下就想到了……

logn3

如果以12来计算的话:

log123=2.26186

int(log123)=2

log123?int(log123)=0.26186

所以直接判断结果是否为0就好了……

bool isPowerOfThree(int n) {
    double logAns= log(n) / log(3);
    return (logAns- int(logAns) == 0) ? true : false;
}

然而这段代码提交后发现仍然是错误的,243在上面的代码中居然是false,打断点看看应该是由于精度问题,所以继续改改。

logn3=logn10log310

所以代码就出来了……

代码

class Solution {
public:
    bool isPowerOfThree(int n) {
        double logAns = log10(n) / log10(3);
        return (logAns - int(logAns) == 0) ? true : false;
    }
};
时间: 2024-10-12 12:02:54

LeetCode 326 Power of Three(3的幂)(递归、Log函数)的相关文章

39. leetcode 326. Power of Three

326. Power of Three Given an integer, write a function to determine if it is a power of three. Follow up: Could you do it without using any loop / recursion? 思路:看这个数取以3为底的对数结果是否为整数,C++中只有自然对数函数log()和以10为底的对数函数log10(),所以要借助换底公式.此处用自然对数会有精度问题,用以10为底的对数

326 Power of Three 3的幂

给出一个整数,写一个函数来确定这个数是不是3的一个幂.后续挑战:你能不使用循环或者递归完成本题吗? 详见:https://leetcode.com/problems/power-of-three/description/ C++: 方法一: class Solution { public: bool isPowerOfThree(int n) { while(n&&n%3==0) { n/=3; } return n==1; } }; 方法二: class Solution { publi

LeetCode 231 Power of Two(2的幂)

翻译 给定一个整型数,写一个函数来决定它是否是2的幂. 原文 Given an integer, write a function to determine if it is a power of two. 分析 详情请看这篇文章:LeetCode 326 Power of Three(3的幂)(递归.Log函数) 看题号,326是本题的加强版,326是要求不能用循环或递归的--大家可以去看看上面那篇文章. 本题就直接贴我的代码了-- 代码 class Solution { public: bo

Leetcode 326.3的幂 By Python

给定一个整数,写一个函数来判断它是否是 3 的幂次方. 示例 1: 输入: 27 输出: true 示例 2: 输入: 0 输出: false 示例 3: 输入: 9 输出: true 示例 4: 输入: 45 输出: false 进阶: 你能不使用循环或者递归来完成本题吗? 思路 循环/3看最后是不是等于1就好了 代码 class Solution(object): def isPowerOfThree(self, n): """ :type n: int :rtype:

326. Power of Three

/* * 326. Power of Three * 2016-7-8 by Mingyang * 中规中矩,不过注意,n不能为0,不然while一直走,也不能为负 * 时间logn,空间到是没有要求 */ public boolean isPowerOfThree(int n) { if (n < 1) { return false; } while (n % 3 == 0) { n /= 3; } return n == 1; }

leetCode(32):Power of Two

Given an integer, write a function to determine if it is a power of two. 2的幂的二进制表示中,必然只有一个"1",且不可能为负数. class Solution { public: bool isPowerOfTwo(int n) { if(n<0) {//若为负数则直接返回 return false; } int num=0; while(n) {//统计1的个数 n=n&(n-1); num++

Uva 11149 - Power of Matrix ( 矩阵快速幂 )

Uva 11149 -Power of Matrix ( 矩阵快速幂 ) #include <cstdio> #include <cstring> #define CLR( a, b ) memset( a, b, sizeof(a) ) #define MOD 10 #define MAX_SIZE 40 struct Mat { int r, c; int mat[MAX_SIZE][MAX_SIZE]; Mat( int _r = 0 , int _c = 0 ) { CLR

LeetCode Power of Two (2的幂)

题意:判断1个数n是否刚好是2的幂,幂大于0. 思路:注意会给负数,奇数.对于每个数判断31次即可. 1 class Solution { 2 public: 3 bool isPowerOfTwo(int n) { 4 if(n<1||(n&1)==1&&n>1) return false; 5 unsigned int t=1; 6 while(t<n) //注意爆int 7 t<<=1; 8 if(t==n) return true; 9 ret

326. Power of Three(LeetCode)

Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it without using any loop / recursion? 1 class Solution { 2 public: 3 bool isPowerOfThree(int n) { 4 if (n == 0) 5 return false; 6 while (n != 1) 7 { 8