Problem:
Given an integer, write a function to determine if it is a power of three.
Could you do it without using any loop / recursion?
Summary:
用非循环/递归的方法判断数n是否为3的整数幂。
Analysis:
1. 循环:将n逐次除以3,判断是否为3的整数幂。
1 class Solution { 2 public: 3 bool isPowerOfThree(int n) { 4 if (n <= 0) { 5 return false; 6 } 7 while (n > 1) { 8 if (n % 3) { 9 return false; 10 } 11 12 n /= 3; 13 } 14 15 return true; 16 } 17 };
2. 递归:若n为3的整数幂,n/3必为3的整数幂,以这个思想构建递归。
1 class Solution { 2 public: 3 bool isPowerOfThree(int n) { 4 if (n <= 0) { 5 return false; 6 } 7 8 if (n == 1) { 9 return true; 10 } 11 12 return (n % 3 == 0) && isPowerOfThree(n / 3); 13 } 14 };
3. 非循环/递归:n若为3的整数幂,则 n = 3log3n = 3log2n / log 23
1 class Solution { 2 public: 3 bool isPowerOfThree(int n) { 4 return (n > 0) && (n == pow(3, round(log(n) / log(3)))); 5 } 6 };