当前位置: 首页 > news >正文

LeetCode 1780: Check if Number is a Sum of Powers of Three(2025/3/4 每日一题)

标题:1780. Check if Number is a Sum of Powers of Three

题目:

例:

Constraints: 1<=n<=1e7

解题思路:

1. 回溯法:看了下最大n是10的7次方,3的14.67次方。数据量可以支持回溯法来计算。这个没什么好解释的,就一个一个试呗,直接上代码:

class Solution {
public:
    bool isPower(int n, int idx, int maxPower) {
        if (n == 0) return true;
        if (n < 0) return false;
        for(int i = idx; i <= maxPower; i++) {
            if (isPower(n-pow(3, i), i+1, maxPower)){
                return true;
            }
        }
        return false;
    }
    bool checkPowersOfThree(int n) {
        int maxPower = (int)(log(n) / log(3));
        return isPower(n, 0, maxPower);
    }
};

测试也能过,但时间和空间惨不忍睹,是可忍孰不可忍,叔可忍婶也不可忍。。。于是开辟新思路。

2. 数学方法:

一个数是各种以3为底不同幂加和的话,可以将数字转为3进制的数字。则每一位可能是0,1,2。如果是0和1,都符合题意,如果有一位是2,则返回false。例:

12 转成 三进制数为 110 = pow(3, 2) + pow(3, 1) + 0; 则返回true;

21 转成三进制数为 210 = 2* pow(3, 2) + pow(3, 1) + 0 则返回false;

代码为:

class Solution {
public:
    bool checkPowersOfThree(int n) {
        while (n > 0) {
            if ( n % 3 == 2) return false;
            n /= 3;
        }
        return true;
    }
};

时间复杂度 O(logN), 空间复杂度O(1)。

这个结果舒服了哈哈……

相关文章:

  • 仿12306项目(4)
  • Rust语言基础知识详解【七】
  • 【Unity3D】Unity混淆工具Obfuscator使用
  • BS架构(笔记整理)
  • 网络安全rt是什么意思
  • 【C++】ImGui:VSCode下的无依赖轻量GUI开发
  • AI应用测试:遇到类ChatGPT的流式接口要如何压测?
  • rust笔记11:虚拟方法表VTable 和 dyn
  • LC109. 有序链表转换平衡二叉搜索树
  • 【操作系统】设备管理
  • 多机多卡训练和单机多卡训练速度对比
  • VTP协议故障排除——三层交换机
  • MySQL零基础教程15—简单的表连接(join)
  • Windows系统还原详解
  • 51单片机使用DS18B20温度传感器
  • day27 第八章 贪心算法 part01
  • 深度学习R8周:RNN实现阿尔兹海默症(pytorch)
  • 补丁供应链案例:CVE-2024-7254. Protobuf. Google
  • FastGPT 引申:知识库辅助开发(代码符号自动提取与文件匹配工具详解)
  • FastGPT 引申:如何基于 LLM 判断知识库的好坏
  • 郑州企业建站模板/下载百度2023最新版安装
  • 新郑做网站/佛山网站建设十年乐云seo
  • 网站建设架构/河南省郑州市金水区
  • 那里有个人做网站的/房地产销售
  • 自动化毕设题目网站开发/seo入门讲解
  • 建筑公司网站大全/快速优化官网