Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 1780. 判断一个数字是否可以表示成三的幂的和(位运算)

LeetCode 1780. 判断一个数字是否可以表示成三的幂的和(位运算)

作者头像
Michael阿明
发布于 2021-09-06 02:10:05
发布于 2021-09-06 02:10:05
63200
代码可运行
举报
运行总次数:0
代码可运行

文章目录

1. 题目

给你一个整数 n ,如果你可以将 n 表示成若干个不同的三的幂之和,请你返回 true ,否则请返回 false 。

对于一个整数 y ,如果存在整数 x 满足 y==3x,我们称这个整数 y 是三的幂。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例 1:
输入:n = 12
输出:true
解释:12 = 3^1 + 3^2

示例 2:
输入:n = 91
输出:true
解释:91 = 3^0 + 3^2 + 3^4

示例 3:
输入:n = 21
输出:false
 
提示:
1 <= n <= 10^7

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/check-if-number-is-a-sum-of-powers-of-three 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 系数每一位是 0 或者 1,用数据范围内的 二进制数枚举系数的组合
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    bool checkPowersOfThree(int n) {
        int s = (1<<15);
        vector<int> pow3(16, 1);
        for(int i = 1; i <= 15; i++)
            pow3[i] = pow3[i-1]*3;
        for(int i = 0; i <= s; i++) 
        {	// 系数是 i 
            int num = 0;
            for(int j = 0; j <= 15; j++)
            {
                if(1&(i>>j))//第 j 位系数 是 1
                    num += pow3[j];
            }
            if(num == n)
                return true;
        }
        return false;
    }
};

292 ms 5.9 MB C++

  • 从最大的位开始减
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    bool checkPowersOfThree(int n) {
        int s = (1<<15);
        vector<int> pow3(16, 1);
        for(int i = 1; i <= 15; i++)
            pow3[i] = pow3[i-1]*3;
        for(int i = 15; i >= 0; --i)
        {	
            if(n >= pow3[i])
                n -= pow3[i];
        }
        return n==0;
    }
};

0 ms 5.9 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 1922. 统计好数字的数目(快速幂)
我们称一个数字字符串是 好数字 当它满足(下标从 0 开始)偶数 下标处的数字为 偶数 且 奇数 下标处的数字为 质数 (2,3,5 或 7)。
Michael阿明
2021/09/06
2940
LeetCode 1886. 判断矩阵经轮转后是否一致
给你两个大小为 n x n 的二进制矩阵 mat 和 target 。 现 以 90 度顺时针轮转 矩阵 mat 中的元素 若干次 ,如果能够使 mat 与 target 一致,返回 true ; 否则,返回 false 。
Michael阿明
2021/09/06
2360
LeetCode 1871. 跳跃游戏 VII(贪心)
给你一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump 。 一开始,你在下标 0 处,且该位置的值一定为 '0' 。 当同时满足如下条件时,你可以从下标 i 移动到下标 j 处:
Michael阿明
2021/09/06
2040
LeetCode 1952. 三除数
给你一个整数 n 。如果 n 恰好有三个正除数 ,返回 true ;否则,返回 false 。
Michael阿明
2021/09/06
2350
LeetCode 1718. 构建字典序最大的可行序列(贪心+回溯)
序列里面两个数 a[i] 和 a[j] 之间的 距离 ,我们定义为它们下标绝对值之差 |j - i| 。
Michael阿明
2021/09/06
6130
LeetCode 1878. 矩阵中最大的三个菱形和(模拟)
菱形和 指的是 grid 中一个正菱形 边界 上的元素之和。 本题中的菱形必须为正方形旋转45度,且四个角都在一个格子当中。 下图是四个可行的菱形,每个菱形和应该包含的格子都用了相应颜色标注在图中。
Michael阿明
2021/09/06
2980
LeetCode 891. 子序列宽度之和(数学)
类似题目: LeetCode 907. 子数组的最小值之和(单调栈) 天池 在线编程 所有子数组之和(排列组合)
Michael阿明
2021/09/06
3940
LeetCode 1828. 统计一个圆中点的数目
给你一个数组 points ,其中 points[i] = [xi, yi] ,表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。
Michael阿明
2021/09/06
4540
LeetCode LCS 02. 完成一半题目(计数+排序)
有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。 主办方提供了 2*N 道题目,整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题,请返回被选的 N 道题目至少包含多少种知识点类型。
Michael阿明
2021/09/06
3730
LeetCode 1940. 排序数组之间的最长公共子序列(二分查找)
给定一个由整数数组组成的数组arrays,其中arrays[i]是严格递增排序的,返回一个表示所有数组之间的最长公共子序列的整数数组。
Michael阿明
2021/09/06
4980
LeetCode 1449. 数位成本和为目标值的最大数字(DP)
给你一个整数数组 cost 和一个整数 target 。请你返回满足如下规则可以得到的 最大 整数:
Michael阿明
2021/09/06
2500
LeetCode 1944. 队列中可以看到的人数(单调栈)
有 n 个人排成一个队列,从左到右 编号为 0 到 n - 1 。 给你以一个整数数组 heights ,每个整数 互不相同,heights[i] 表示第 i 个人的高度。
Michael阿明
2021/09/06
4370
LeetCode 1899. 合并若干三元组以形成目标三元组
三元组 是一个由三个整数组成的数组。 给你一个二维整数数组 triplets ,其中 triplets[i] = [ai, bi, ci] 表示第 i 个 三元组 。 同时,给你一个整数数组 target = [x, y, z] ,表示你想要得到的 三元组 。
Michael阿明
2021/09/06
4010
LeetCode 1793. 好子数组的最大分数(单调栈)
一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1) 。一个 好 子数组的两个端点下标需要满足 i <= k <= j 。
Michael阿明
2021/09/06
4290
图解LeetCode——1780. 判断一个数字是否可以表示成三的幂的和(难度:中等)
给你一个整数 n ,如果你可以将 n 表示成若干个不同的三的幂之和,请你返回 true ,否则请返回 false 。
爪哇缪斯
2023/05/10
2730
图解LeetCode——1780. 判断一个数字是否可以表示成三的幂的和(难度:中等)
LeetCode 1799. N 次操作后的最大分数和(回溯 / 状态压缩DP)
给你 nums ,它是一个大小为 2 * n 的正整数数组。 你必须对这个数组执行 n 次操作。
Michael阿明
2021/09/06
5170
LeetCode 第 33 场双周赛(511/3304,前15.5%,第4次全部通过)
全国排名: 511 / 3304,15.5%;全球排名: 1626 / 11366,14.3%
Michael阿明
2021/02/19
3400
LeetCode 1269. 停在原地的方案数(DP)
每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外)。
Michael阿明
2021/09/06
2930
LeetCode 第 23 场双周赛(970/2044,前47.5%)
做出来了 1、3 两题,继续加油! 第二道字符串的题,又是看错题,以后要多读几遍题目,题目说要使用所有字符,我视而不见,去排列组合。。。 第四题,想到了贪心,又转到动态规划去做,没做出来。
Michael阿明
2020/07/13
3530
LeetCode 1814. 统计一个数组中好对子的数目(哈希)
给你一个数组 nums ,数组中只包含非负整数。 定义 rev(x) 的值为将整数 x 各个数字位反转得到的结果。 比方说 rev(123) = 321 , rev(120) = 21 。我们称满足下面条件的下标对 (i, j) 是 好的 :
Michael阿明
2021/09/06
3140
推荐阅读
相关推荐
LeetCode 1922. 统计好数字的数目(快速幂)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档