力扣每日一題2022.12.9---1780. 判斷一個數字是否可以表示成三的冪的和
阿新 • • 發佈:2022-12-09
給你一個整數 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 }