【LeetCode】重新排序得到 2 的幂 Java 题解
题目描述
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
复制代码
思路分析
今天的算法题目是重新排序得到 2 的幂,根据题意,拆分成两个子问题分别求解。子问题 1 是枚举所有 N 的组合数,子问题 2 是求 2 的幂。
对于子问题 1,首先讲输入的 n 转换成数组,然后采用回溯的算法思想和框架,使用 boolean[] visited 记录使用过的数组元素,枚举所有的组合。
对于子问题 2,我们可以使用位运算,快速计算是否是 2 的幂。
子问题求解思路明确之后,在结合题目,**将数字重新排序,注意其前导数字不能为零。**使用这一重要条件,对回溯的过程进行减枝,提升算法执行效率,实现代码如下:
通过代码
复制代码
总结
上述算法的时间复杂度是 O(m!), 空间复杂度是 O(m)
今天的算法题目是综合题目,考察了 2 个基本知识点,我们在平时的学习和练习的过程中,首先把基础知识夯实,有助于我们解决综合问题。
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/837b2aada3624fea7f5dc920b】。文章转载请联系作者。
评论