美文网首页
重新排序得到 2 的幂

重新排序得到 2 的幂

作者: xialu | 来源:发表于2021-10-28 21:11 被阅读0次

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reordered-power-of-2

题目描述:

给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。

示例 1:

输入:1
输出:true

示例 2:

输入:10
输出:false

示例 3:

输入:16
输出:true

示例 4:

输入:24
输出:false

示例 5:

输入:46
输出:true

思路:
  • 先将范围内所有2的幂提前初始化到容器set中
  • 深度遍历n到所有组合,判断是否存在于set中
    • 是,返回true
    • 否,返回false
代码实现:
class Solution {
    public Set<Integer> set = new HashSet();
    public int len;
    public boolean[] flag;
    public boolean result = false;
    public String str_num;
    public boolean reorderedPowerOf2(int n) {
        
        str_num = String.valueOf(n);
        // 数字长度.
        len = str_num.length();
        flag = new boolean[len];
        for (int i = 1; i <= (int)1e9+10; i *= 2) {
            set.add(i);
        }
        for (int i = 0; i < len; i++) {
            char ch = str_num.charAt(i);
            if (ch == '0') continue;
            flag[i] = true;
            StringBuilder sb = new StringBuilder();
            sb.append(ch + "");
            dfs(0, sb);
            flag[i] = false;
            sb.deleteCharAt(sb.length() - 1);
        }
        return result;
    }
    public void dfs(int idx, StringBuilder sb) {
        
        if (idx == (len - 1)) {
            Integer num = Integer.valueOf(sb.toString());
            if (set.contains(num)) result = true;
                return;
        }

        for (int i = 0; i < len; i++) {
            if (flag[i]) continue;
            char ch = str_num.charAt(i);
            sb.append(ch + "");
            flag[i] = true;
            dfs (idx + 1, sb);
            sb.deleteCharAt(sb.length() - 1);
            flag[i] = false;
        }

    }
}

相关文章

  • 重新排序得到 2 的幂

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reorde...

  • 869. 重新排序得到 2 的幂

    给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。 如果我们可以通过上述方式...

  • LeetCode刷题-重新排序得到2的幂

    前言说明 算法学习,日常刷题记录。 题目连接 重新排序得到2的幂[https://leetcode-cn.com/...

  • 869. 重新排序得到2的幂(Python)

    难度:★★★☆☆类型:数组方法:数学 力扣链接请移步本题传送门[https://leetcode-cn.com/p...

  • Algorithms_in_C++ bitonic_sort

    双调排序 双调排序是一种data-independent的排序,标准的双调序列个数为2的幂次方个。如果将序列画成波...

  • 判断一个数是否是2的n次幂

    解题思路 1:如何得到2的n次幂,2*2*2 2:将传入的数据进行“循环除以2”直到该数据=2那么该数据就是2的次幂

  • 2019-07-26

    优化器新特性 优化器具有一些新特性,主要是重新排序join和自动mapjoin。 (1)重新排序join (2)自...

  • 算法导论-基础知识-算法入门

    插入排序 问题 输入:n个数(a1,a2,···,an).输出:输入序列的一个排列(即重新排序)(a'1,a'2,...

  • 常用算法

    快速幂 Fast Power 快速取模 FastMode 快速排序 FastSort

  • 几大排序算法js实现

    冒泡排序 1 具体实现 2 分析 通过函数图像很容易得到: 由以上可以得到冒泡排序的时间复杂度为:F(n) = O...

网友评论

      本文标题:重新排序得到 2 的幂

      本文链接:https://www.haomeiwen.com/subject/riqbaltx.html