869. 重新排序得到 2 的幂
难度:中等
给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。
示例 1:
输入:1
输出:true
示例 2:
输入:10
输出:false
示例 3:
输入:16
输出:true
示例 4:
输入:24
输出:false
示例 5:
输入:46
输出:true
提示:
1 <= N <= 10^9
解:
执行用时 : 7 ms, 在Reordered Power of 2的Java提交中击败了64.56% 的用户
内存消耗 : 33.6 MB, 在Reordered Power of 2的Java提交中击败了68.57% 的用户
思路:将N转为char数组后排序,找出1到10*N中所有2的幂次的数,排序后对比即可
Code:
class Solution {
public boolean reorderedPowerOf2(int N) {
char arr[]=(N+"").toCharArray();
Arrays.sort(arr);
for(long i=1;i<(long)10*N;){
char arr1[]=(i+"").toCharArray();
Arrays.sort(arr1);
if(Arrays.equals(arr,arr1))
return true;
i*=2;
}
return false;
}
}
145. 二叉树的后序遍历
难度:困难
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
解:
执行用时 : 1 ms, 在Binary Tree Postorder Traversal的Java提交中击败了97.20% 的用户
内存消耗 : 33.9 MB, 在Binary Tree Postorder Traversal的Java提交中击败了78.07% 的用户
思路:递归,非递归则使用栈做根右左的
Code:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> list=new ArrayList<>();
public List<Integer> postorderTraversal(TreeNode root) {
recursion(root);
return list;
}
void recursion(TreeNode node){
if(node==null)
return;
if(node.left!=null)
recursion(node.left);
if(node.right!=null)
recursion(node.right);
list.add(node.val);
return;
}
}