本文主要是介绍Leet-code 869.重新排序得到 2 的幂,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述:
给定正整数 N
,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true
;否则,返回 false
。
示例 1:
输入:1 输出:true
示例 2:
输入:10 输出:false
示例 3:
输入:16 输出:true
示例 4:
输入:24 输出:false
示例 5:
输入:46 输出:true
思路分析:一个数进行重排后是2的幂,假设能够排列出2的幂出来 ,那么这个数的位数先确定出来,然后在2的多少次幂位数为该数的位数之间进行遍历。
例如 输入 821,位数为3位,那么直接在2的幂为三位数之间进行判断,即从128 256 512这三个数分别对 821进行匹配。
匹配的思路是:比如128 对821进行匹配,就是从 1 2 8,分别去在 821串进行删除,最后刚好能把821删除光,即表示821可以排列出128,即是2的幂。
再举个例子:输入2014,4位数,所以首先定义到最小的2的幂为4位数的数,即1024,从 1 0 2 4 去删除2014串,刚好能删除光这个数,则答案为true。
var reorderedPowerOf2 = function (N) {let res = [];let n = N;while (N) {res.push((N % 10).toString());N = Math.floor(N / 10);}let s = 1;while (s.toString().length < res.length) {s *= 2;}while (s.toString().length == res.length) {let str = s.toString();let temp = [...res];for (let i = 0; i < str.length; i++) {let j = temp.indexOf(str[i]);if (j == -1) {break;} else {temp.splice(j, 1);}}if (temp.length == 0) {return true;} s *= 2;}return false
};
这篇关于Leet-code 869.重新排序得到 2 的幂的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!