力扣:869. 重新排序得到 2 的幂

这篇具有很好参考价值的文章主要介绍了力扣:869. 重新排序得到 2 的幂。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

枚举和回溯

1.先把int值转换成char数组,之后再用回溯来枚举出全部的排列顺序,在回溯排列过程中要防止同一个数据的重新使用,同时要计算排列中的数字总和,在进行判断这个数据是否是2的幂,使用递归的方式进行,判断后将判断结果加入到li2集合中最后遍历集合li2来判断全部排列的数组是否有谁的总和是符合2的幂,有返回true。文章来源地址https://www.toymoban.com/news/detail-836609.html

class Solution {
    //接收排列的集合
    List<Character> li1=new ArrayList<>();
    //接收全部排列是否满足2的幂的集合
    List<Integer> li2=new ArrayList<>();
    public boolean reorderedPowerOf2(int n) {
        //把数字转化成char的数组
        String st=""+n;
        char[] ch=new char[st.length()];
        for(int i=0;i<st.length();i++){
            ch[i]=st.charAt(i);
        }
         //用于去重用的标记nums数组中什么元素用了的标记
        int[] Index=new int[st.length()];
        Arrays.sort(ch);
        //调用回溯函数
        huisu(ch,Index,st.length());
        //遍历li2来看li2中是否有符合条件的2的幂的排列
        for(int i=0;i<li2.size();i++){
            if(li2.get(i)==1){
                return true;
            }
        }
        return false;
   }
   //回溯函数
  public  void huisu(char[] ch,int [] Index,int leng){
      //终止条件
         if(li1.size()==leng){
        //进行排列的数字计算
             int sum=0;
             for(int i=0;i<li1.size();i++){
                 sum=sum*10+li1.get(i)-'0';
             }
             //将数字和值判断是否是2的幂的结果加入到li2集合
             li2.add(iftrue(sum));
             return;
         }
         //遍历全部的排列
         for(int i=0;i<leng;i++){
             //前导数字不能为零
             if(li1.size()==0&&ch[i]=='0'){
                 continue;
             }
             //假如Index【i】没有用,就进行向下寻找全排列
            if(Index[i]==0){
                //同时要把Index【i】标记为已使用
                Index[i]=1;
             li1.add(ch[i]);
             huisu(ch,Index,leng);
             //回溯节点,寻找其他节点
                Index[i]=0;
             li1.removeLast();
            }
         }
    }
    //进行判断排列的值是否时2的幂,用递归的方式判断
    public int iftrue(int sum){
        if(sum==1){
            return 1;
        }
        if(sum%2==1){
            return 0;
        }
        return iftrue(sum/2);
    }
}

到了这里,关于力扣:869. 重新排序得到 2 的幂的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ansible:如何在centos 7上重新启动auditd服务得到关于依赖的错误

    在我的剧本中,我有一个更新 audit.rules 的任务,然后通知应该重新启动 auditd 服务的处理程序。 当 playbook 运行时,会更新审计规则并请求重新启动 auditd,但这会失败,如下所示。 当我查看auditd 的单元定义时,我可以看到rejectManualStop=yes。这就是我无法重新启动服务的原因吗

    2024年02月02日
    浏览(36)
  • 一篇文章带你重新回溯单链表的所有

    🍉博客主页:阿博历练记 📗文章专栏:数据结构与算法 🚚代码仓库:阿博编程日记 🌹欢迎关注:欢迎友友们订阅收藏+关注哦 友友们,上期给大家介绍完顺序表功能实现之后,我们知道了它的一个绝对优势就是 下标的随机访问 ,但是顺序表也有以下几个不优的特点:

    2024年02月05日
    浏览(50)
  • 组合(力扣)dfs + 回溯 + 剪枝 JAVA

    给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2: 输入:n = 1, k = 1 输出:[[1]] 提示: 1 = n = 20 1 = k = n 解题思路: 1.每个元素有选与不选两种情况,

    2024年02月16日
    浏览(44)
  • 算法学习——LeetCode力扣回溯篇2

    40. 组合总和 II - 力扣(LeetCode) 描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 示例 1: 输入: candidates = [10,1,2,7

    2024年02月20日
    浏览(28)
  • 力扣--深度优先算法/回溯算法47.全排列 Ⅱ

    思路分析: 使用DFS算法进行全排列,递归地尝试每个可能的排列方式。 使用 path 向量保存当前正在生成的排列,当其大小达到输入数组的大小时,将其加入结果集。 使用 numvisited 向量标记每个数字是否已经被访问过,以确保每个数字在一个排列中只使用一次。 在递归过程中

    2024年03月13日
    浏览(38)
  • 【力扣 51】N 皇后(回溯+剪枝+深度优先搜索)

    按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后

    2024年02月22日
    浏览(28)
  • 【力扣】416. 分割等和子集 <动态规划、回溯>

    给你一个 只包含正整数的非空数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums = [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] 和 [11] 。 示例 2: 输入:nums = [1,2,3,5] 输出:false 解释:数组不能分割成两个元素和

    2024年02月10日
    浏览(25)
  • 力扣第40题 组合总和 || c++ 回溯经典

    40. 组合总和 II 中等 相关标签 数组   回溯 给定一个候选人编号的集合  candidates  和一个目标数  target  ,找出  candidates  中所有可以使数字和为  target  的组合。 candidates  中的每个数字在每个组合中只能使用  一次  。 注意: 解集不能包含重复的组合。  示例 1: 示例

    2024年02月07日
    浏览(31)
  • 【算法】【Python3、动态规划、贪心、二分查找】力扣1671. 得到山形数组的最少删除次数

    1671. 得到山形数组的最少删除次数 给定一个整数数组 nums ,我们定义该数组为山形数组当且仅当: nums 的长度至少为 3。 存在一个下标 i 满足 0 i len(nums) - 1 且: nums[0] nums[1] ... nums[i - 1] nums[i] nums[i] nums[i + 1] ... nums[len(nums) - 1] 现在,给定整数数组 nums ,我们的目标是将其变为

    2024年01月18日
    浏览(44)
  • 力扣日记1.21-【回溯算法篇】77. 组合

    日期:2023.1.21 参考:代码随想录、力扣 终于结束二叉树了!听说回溯篇也是个大头,不知道这一篇得持续多久了…… 题目描述 难度:中等 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n = 4, k = 2 输出:

    2024年01月22日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包