1. 程式人生 > 其它 >力扣每日一題2022.12.9---1780. 判斷一個數字是否可以表示成三的冪的和

力扣每日一題2022.12.9---1780. 判斷一個數字是否可以表示成三的冪的和

給你一個整數 n ,如果你可以將 n 表示成若干個不同的三的冪之和,請你返回 true ,否則請返回 false 。
對於一個整數 y ,如果存在整數 x 滿足 y == 3x ,我們稱這個整數 y 是三的冪。

示例 1:
輸入:n = 12
輸出:true
解釋:12 = 31 + 32

示例 2:
輸入:n = 91
輸出:true
解釋:91 = 30 + 32 + 34


示例 3:
輸入:n = 21
輸出:false
提示:
    1 <= n <= 107
來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/check-if-number-is-a-sum-of-powers-of-three
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

經觀察,可以發現如果一個數符合要求,則這個數可以被寫作如下格式:

(3^0) + 3 * {(3^0) + 3*[......]};   注:(3^0) 可以刪去。

列如:12 = 3^0 + 3 * (3^0 + 3 * (3^0));符合要求

 39 = 3 * ( 3^0 + 3 * (3^0 + 3 * (3^0 + 3 * (3^0))));符合要求

也就是說,如果一個數n符合要求,那麼這個數要麼是3的倍數,要麼減去1之後是3的倍數,n 對3進行整除,並重新經過該判斷,迴圈往復,經過有限次後,n必定變成0;

如果在中間的某一步n不符合要麼是3的倍數,要麼減去1之後是3的倍數這個判斷,那麼這個數不符合題意,直接返回false;

程式碼如下:

 1 class Solution {
 2     public boolean checkPowersOfThree(int n) {
 3         if (n != 0) {
 4             int tem = n % 3;
 5             if (tem == 1 || tem == 0) {
 6                 n = n / 3;
 7                 return checkPowersOfThree(n);
 8             } else {
 9                 return false;
10             }
11         } else {
12             return true;
13         }
14     }
15 }