[LeetCode5681.判断一个数字是否可以表示成三的幂的和] | 刷题打卡

219 阅读1分钟

题目描述

题目来源

leetcode-cn 44双周赛 T2 中等

思路解析

这个题一看就知道: 如果一个数满足条件,那么他在三进制下每一位要么0,要么1。例如:12(110 -> 1×3^2 + 1×3^1 + 0),那么可以分为两种思路:

  • 循环相减:利用循环减掉3的幂,判断最终结果是否为0。
  • 利用String.prototype.toString(radix) 将其转换为3进制数。

AC代码

// 思路1
/**
 * @param {number} n
 * @return {boolean}
 */
var checkPowersOfThree = function (n) {
    let base = 1;
    while (base * 3 <= n) {
        base *= 3;
    }
    while (n && base) {
        if (n >= base) {
            n -= base;
            if (n >= base) {
                return false;
            }
        }
        base /= 3;
    }
    return true;
};
// 思路2
var checkPowersOfThree = function(n) {
  const str = n.toString(3);
  for(const char of str) {
    if(char === '2') {
      return false;
    }
  }
  return true;
};

总结

思路与之类似的题目有:

简单自我介绍

来和chiyu一起刷穿leetcode~

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情