今天还是太忙了,玩了一整天。只能刷几道题来弥补过失。
LeetCode第12题:
分析一下题目,并不是太难,穷举将所有的情况全部举出,和2019年秋招某道找零钱的编程题异曲同工。应该有更简单的做法,不用新建很多数组,可以节省很多空间,但是下面的代码很明了。
class Solution {
public String intToRoman(int num) {
int[] arr={1000,900,500,400,100,90,50,40,10,9,5,4,1};
int[] total=new int[13];
String[] strs={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
for(int i=0;i<13;i++){
total[i]=num/arr[i];
num=num%arr[i];
}
StringBuilder sb=new StringBuilder();
for(int i=0;i<13;i++){
if(total[i]!=0){
for(int j=0;j<total[i];j++){
sb.append(strs[i]);
}
}
}
return sb.toString();
}
}
LeetCode 102题
二叉树的按层次遍历,肯定很简单。但是要求的返回值是这个,所以树的每层必须要记录当前的的结点数,代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
List<List<Integer>> lists = new ArrayList<>();
if(root==null) {
return lists;
}
while (!queue.isEmpty()) {
int count=queue.size();
List<Integer> list = new ArrayList<>();
while(count-- >0) {
TreeNode node=queue.poll();
list.add(node.val);
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
lists.add(list);
}
return lists;
}
}
在代码段每次遍历一层时,需记录当前的当前的结点数
LeetCode 103题
此题上一题的延伸,锯齿打印层次遍历树,建立标识符,在每次循环遍历时按照奇偶level,添加当前的list 或者相反的list即可。。。。。很简单。。。。。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
Queue<TreeNode> queue1 = new LinkedList<>();
Queue<TreeNode> queue1 = new LinkedList<>();
queue1.add(root);
List<List<Integer>> list1 = new ArrayList<>();
if(root==null) {
return list1;
}
boolean flag = true;
while (!queue1.isEmpty()) {
int count=queue1.size();
List<Integer> list = new ArrayList<>();
while(count-- >0) {
TreeNode node=queue1.poll();
list.add(node.val);
if (node.left != null) {
queue1.add(node.left);
}
if (node.right != null) {
queue1.add(node.right);
}
}
if(flag){
list1.add(list);
flag = !flag;
}else{
List<Integer> list2 = new ArrayList<>();
for(int i =list.size()-1;i>=0;i--){
list2.add(list.get(i));
}
list1.add(list2);
flag = !flag;
}
}
return list1;
}
}
代码写的很粗糙,肯定可以优化。