Skip to content

Commit d1da20e

Browse files
authored
Merge pull request gzc426#15 from gzc426/master
拉取最新
2 parents 1fd3015 + e7c6761 commit d1da20e

File tree

27 files changed

+1101
-0
lines changed

27 files changed

+1101
-0
lines changed

2018.11.29-leetcode443/kiritocly.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
private static int solution(char[] charArray) {
2+
if (charArray.length == 0) {
3+
return 0;
4+
}
5+
//遍历整个字符数组
6+
//压缩后的字符长度
7+
int resultCount = 0;
8+
//当前重复字符计数
9+
int count = 1;
10+
for (int i = 0; i < charArray.length; i++) {
11+
//如果遇到某个字符与当前字符不相等或者已经遍历到最后一个字符
12+
if (i + 1 == charArray.length || charArray[i] != charArray[i + 1]) {
13+
//记录一下当前字符,并且resultCount加1,比如a,a,b,b,b,扫面到第二个a时
14+
//a!=b,如果a的个数大于1,先将a后面所有的a替换为数字,如a,a替换为a,2
15+
charArray[resultCount++] = charArray[i];
16+
if (count > 1) {
17+
String temp = String.valueOf(count);
18+
for (int k = 0; k < temp.length(); k++) {
19+
charArray[resultCount++] = temp.charAt(k);
20+
}
21+
}
22+
//重新统计下一个字符
23+
count = 1;
24+
} else {
25+
//统计重复的字符个数
26+
count++;
27+
}
28+
29+
}
30+
return resultCount;
31+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
递归
2+
```java
3+
class Solution {
4+
public boolean isSymmetric(TreeNode root) {
5+
if (root == null){
6+
return true;
7+
}
8+
else {
9+
if (check(root.left, root.right)){
10+
return true;
11+
}
12+
else {
13+
return false;
14+
}
15+
}
16+
}
17+
18+
public static boolean check(TreeNode node1, TreeNode node2){
19+
if (node1 == null && node2 == null){
20+
return true;
21+
}
22+
else if (node1 == null || node2 == null){
23+
return false;
24+
}
25+
return node1.val == node2.val && check(node1.right, node2.left) && check(node1.left, node2.right);
26+
}
27+
}
28+
```
29+
非递归
30+
```java
31+
import java.util.*;
32+
class Solution {
33+
public boolean isSymmetric(TreeNode root) {
34+
if ((root == null) || (root.left == null && root.right == null)){
35+
return true;
36+
}
37+
else if (root.left == null || root.right == null){
38+
return false;
39+
}
40+
else {
41+
ArrayDeque<TreeNode> d = new ArrayDeque<TreeNode>();
42+
d.addFirst(root.left);
43+
d.addLast(root.right);
44+
while (d.size() != 0){
45+
TreeNode leftnode = d.pollFirst();
46+
TreeNode rightnode = d.pollLast();
47+
if (leftnode == null && rightnode == null){
48+
return true;
49+
}
50+
else if (leftnode == null || rightnode == null){
51+
return false;
52+
}
53+
else if (leftnode.val != rightnode.val){
54+
return false;
55+
}
56+
else {
57+
if (rightnode.right != null && leftnode.left != null){
58+
d.addLast(rightnode.right);
59+
d.addFirst(leftnode.left);
60+
}
61+
else if (rightnode.right == null && leftnode.left == null){
62+
63+
}
64+
else {
65+
return false;
66+
}
67+
if (rightnode.left != null && leftnode.right != null){
68+
d.addFirst(rightnode.left);
69+
d.addLast(leftnode.right);
70+
}
71+
else if (rightnode.left == null && leftnode.right == null){
72+
73+
}
74+
else {
75+
return false;
76+
}
77+
}
78+
}
79+
return true;
80+
}
81+
}
82+
}
83+
```

2018.12.04-leetcode101/WhiteNight.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
>```java
2+
>/**
3+
> *给定一个二叉树,检查它是否是镜像对称的。
4+
> *
5+
> */
6+
>public class Tree9
7+
>{
8+
> public static class TreeNode
9+
> {
10+
> int data;
11+
> TreeNode left;
12+
> TreeNode right;
13+
>
14+
> TreeNode(int val) {
15+
> data = val;
16+
> }
17+
> }
18+
>
19+
> public boolean isSymmetric(TreeNode root)
20+
> {
21+
> if (root == null)
22+
> return true;
23+
> return checkIsSymmetric(root.left, root.right);
24+
> }
25+
>
26+
> public static boolean checkIsSymmetric(TreeNode leftNode, TreeNode rightNode)
27+
> {
28+
> if (leftNode == null && rightNode == null)
29+
> return true;
30+
> if ((leftNode == null && rightNode != null) || (leftNode != null && rightNode == null))
31+
> return false;
32+
> if (leftNode.data != rightNode.data)
33+
> return false;
34+
> return checkIsSymmetric(leftNode.left, rightNode.right) && checkIsSymmetric(leftNode.right, rightNode.left);
35+
> }
36+
>
37+
> public static void main(String[] args)
38+
> {
39+
> TreeNode p = new TreeNode(1);
40+
> p.left = new TreeNode(2);
41+
> p.right = new TreeNode(2);
42+
> p.left.left = new TreeNode(3);
43+
> p.right.right = new TreeNode(3);
44+
>
45+
> TreeNode q = new TreeNode(1);
46+
> q.left = new TreeNode(2);
47+
> q.right = new TreeNode(2);
48+
> q.left.right = new TreeNode(3);
49+
> q.right.right = new TreeNode(3);
50+
>
51+
> Tree9 t = new Tree9();
52+
> System.out.println(t.isSymmetric(p));
53+
> System.out.println(t.isSymmetric(q));
54+
>
55+
> }
56+
>
57+
>}
58+
>```

2018.12.04-leetcode101/fish.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
```
2+
class Solution {
3+
public boolean isSymmetric(TreeNode treeNode) {
4+
if (treeNode == null) {
5+
return true;
6+
}else {
7+
return isSymmetric(treeNode.getLeft(), treeNode.getRight());
8+
}
9+
}
10+
11+
public boolean isSymmetric(TreeNode left, TreeNode right) {
12+
if (left == null && right == null) {
13+
return true;
14+
}
15+
if (left == null || right == null) {
16+
return false;
17+
}
18+
if (left.getVal() != right.getVal()) {
19+
return false;
20+
}
21+
return isSymmetric(left.getLeft(), right.getRight()) && isSymmetric(left.getRight(), right.getLeft());
22+
}
23+
}
24+
class TreeNode{
25+
private int val;
26+
private TreeNode left;
27+
private TreeNode right;
28+
29+
public TreeNode(int val, TreeNode left, TreeNode right) {
30+
this.val = val;
31+
this.left = left;
32+
this.right = right;
33+
}
34+
35+
public int getVal() {
36+
return val;
37+
}
38+
39+
public void setVal(int val) {
40+
this.val = val;
41+
}
42+
43+
public TreeNode getLeft() {
44+
return left;
45+
}
46+
47+
public void setLeft(TreeNode left) {
48+
this.left = left;
49+
}
50+
51+
public TreeNode getRight() {
52+
return right;
53+
}
54+
55+
public void setRight(TreeNode right) {
56+
this.right = right;
57+
}
58+
}

2018.12.04-leetcode101/kiritocly.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
private static boolean solution(TreeNode root) {
2+
if (root == null) {
3+
return true;
4+
} else {
5+
//二叉树对称的条件
6+
//(1)左子树和右子树对称
7+
//(2)左子树的左子树和右子树的右子树对称
8+
//(3)左子树的右子树和右子树的左子树对称
9+
//递归判断
10+
return judge(root.leftNode, root.rightNode);
11+
}
12+
13+
}
14+
15+
private static boolean judge(TreeNode leftNode, TreeNode rightNode) {
16+
if (leftNode == null && rightNode == null) {
17+
return true;
18+
} else if (leftNode == null || rightNode == null) {
19+
return false;
20+
}
21+
//条件(1)
22+
if (leftNode.value != rightNode.value) {
23+
return false;
24+
}
25+
//条件(2)
26+
boolean flag1 = judge(leftNode.leftNode, rightNode.rightNode);
27+
//条件(3)
28+
boolean flag2 = judge(leftNode.rightNode, rightNode.leftNode);
29+
if (flag1 && flag2) {
30+
return true;
31+
}
32+
return false;
33+
}

2018.12.04-leetcode101/syuan.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
##### 题目
2+
3+
```
4+
给定一个二叉树,检查它是否是镜像对称的。
5+
6+
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
7+
8+
1
9+
/ \
10+
2 2
11+
/ \ / \
12+
3 4 4 3
13+
14+
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
15+
16+
1
17+
/ \
18+
2 2
19+
\ \
20+
3 3
21+
```
22+
##### 代码
23+
递归
24+
```
25+
public boolean isSymmetric(TreeNode root) {
26+
if (root==null) {
27+
return true;
28+
}else{
29+
return isSymmetric(root.left,root.right);
30+
}
31+
}
32+
33+
public boolean isSymmetricCore(TreeNode leftNode, TreeNode rightNode){
34+
if (leftNode==null && rightNode==null) {
35+
return true;
36+
}
37+
if (leftNode.val!=rightNode.val || leftNode==null || rightNode==null) {
38+
return false;
39+
}
40+
return isSymmetricCore(leftNode.left,rightNode.right) && isSymmetricCore(leftNode.right,rightNode.left);
41+
}
42+
```
43+
##### 非递归法
44+
45+
```
46+
class Solution {
47+
public boolean isSymmetric(TreeNode root) {
48+
if(root == null) return true;
49+
Stack<TreeNode> stack = new Stack<TreeNode>();
50+
stack.push(root.left);
51+
stack.push(root.right);
52+
while(!stack.empty()) {
53+
TreeNode right = stack.pop();
54+
TreeNode left = stack.pop();
55+
if (left == null && right == null) continue;
56+
else if (left == null || right == null || right.val != left.val) return false;
57+
stack.push(left.left);
58+
stack.push(right.right);
59+
stack.push(left.right);
60+
stack.push(right.left);
61+
}
62+
return true;
63+
}
64+
}
65+
```

0 commit comments

Comments
 (0)