Skip to content

Commit d326735

Browse files
committed
add new codes
1 parent 4efb32f commit d326735

File tree

16 files changed

+235
-0
lines changed

16 files changed

+235
-0
lines changed

count-univalue-subtrees/README.md

Whitespace-only changes.

count-univalue-subtrees/Solution.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode(int x) { val = x; }
8+
* }
9+
*/
10+
import java.util.Objects; // remove after leetcode support import this by default
11+
12+
public class Solution {
13+
14+
void patch(Integer[] v, TreeNode parent, TreeNode me){
15+
if(me == null){
16+
v[1] = parent.val;
17+
}
18+
}
19+
20+
// [count, uniq val]
21+
Integer[] _countUnivalSubtrees(TreeNode root) {
22+
23+
if(root == null) return new Integer[]{0, null};
24+
25+
Integer[] left = _countUnivalSubtrees(root.left);
26+
patch(left, root, root.left);
27+
28+
Integer[] right = _countUnivalSubtrees(root.right);
29+
patch(right, root, root.right);
30+
31+
if(Objects.equals(left[1], root.val) && Objects.equals(right[1], root.val)){
32+
return new Integer[]{left[0] + right[0] + 1, root.val};
33+
}
34+
35+
return new Integer[]{left[0] + right[0], null};
36+
}
37+
38+
public int countUnivalSubtrees(TreeNode root) {
39+
return _countUnivalSubtrees(root)[0];
40+
}
41+
}

count-univalue-subtrees/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
layout: solution
3+
title: Count Univalue Subtrees
4+
date: 2015-08-06 22:25:20+08:00
5+
leetcode_id: 250
6+
---
7+
{% include_relative README.md %}

different-ways-to-add-parentheses/README.md

Whitespace-only changes.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
public class Solution {
2+
3+
int calc(int l, int r, char op){
4+
switch(op){
5+
case '+':
6+
return l + r;
7+
case '-':
8+
return l - r;
9+
case '*':
10+
return l * r;
11+
}
12+
13+
// unreachable
14+
throw new RuntimeException();
15+
}
16+
17+
List<Integer> merge(List<Integer>left, List<Integer> right, char op){
18+
if(left.isEmpty()) return right;
19+
if(right.isEmpty()) return left;
20+
21+
List<Integer> rt = new ArrayList<>();
22+
23+
for(int l : left){
24+
for(int r : right){
25+
rt.add(calc(l, r, op));
26+
}
27+
}
28+
29+
return rt;
30+
}
31+
32+
List<Integer> diffWaysToCompute(Integer[] nums, int nst, int ned, Character[] ops){
33+
34+
List<Integer> rt = new ArrayList<>();
35+
36+
if(nst + 1 == ned){
37+
rt.add(nums[nst]);
38+
return rt;
39+
}
40+
41+
for(int i = nst; i < ned - 1; i++){
42+
char op = ops[i];
43+
List<Integer> left = diffWaysToCompute(nums, nst, i + 1, ops);
44+
List<Integer> right = diffWaysToCompute(nums, i + 1, ned, ops);
45+
46+
rt.addAll(merge(left, right, op));
47+
}
48+
49+
return rt;
50+
}
51+
52+
public List<Integer> diffWaysToCompute(String input) {
53+
Scanner scanner = new Scanner(input);
54+
scanner.useDelimiter("");
55+
56+
List<Integer> nums = new ArrayList<>();
57+
List<Character> ops = new ArrayList<>();
58+
59+
while(scanner.hasNext()){
60+
boolean num = false;
61+
int buf = 0;
62+
while (scanner.hasNextInt()){
63+
num = true;
64+
buf = buf * 10 + scanner.nextInt();
65+
}
66+
67+
if(num){
68+
nums.add(buf);
69+
continue;
70+
}
71+
72+
Character op = scanner.next().charAt(0);
73+
ops.add(op);
74+
}
75+
76+
Integer[] _nums = nums.toArray(new Integer[0]);
77+
Character[] _ops = ops.toArray(new Character[0]);
78+
79+
return diffWaysToCompute(_nums, 0, _nums.length, _ops);
80+
}
81+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
layout: solution
3+
title: Different Ways to Add Parentheses
4+
date: 2015-08-06 22:21:28+08:00
5+
leetcode_id: 241
6+
---
7+
{% include_relative README.md %}

flatten-2d-vector/README.md

Whitespace-only changes.

flatten-2d-vector/Solution.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
public class Vector2D {
2+
3+
Iterator<List<Integer>> outterIter;
4+
Iterator<Integer> innerIter = Collections.emptyIterator();
5+
6+
public Vector2D(List<List<Integer>> vec2d) {
7+
outterIter = vec2d.iterator();
8+
}
9+
10+
public int next() {
11+
return innerIter.next();
12+
}
13+
14+
public boolean hasNext() {
15+
if(innerIter.hasNext()){
16+
return true;
17+
}
18+
19+
if(!outterIter.hasNext()){
20+
return false;
21+
}
22+
23+
innerIter = outterIter.next().iterator();
24+
25+
return hasNext();
26+
}
27+
}
28+
29+
/**
30+
* Your Vector2D object will be instantiated and called as such:
31+
* Vector2D i = new Vector2D(vec2d);
32+
* while (i.hasNext()) v[f()] = i.next();
33+
*/

flatten-2d-vector/Vector2D.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Solution.java

flatten-2d-vector/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
layout: solution
3+
title: Flatten 2D Vector
4+
date: 2015-08-06 22:27:26+08:00
5+
leetcode_id: 251
6+
---
7+
{% include_relative README.md %}

0 commit comments

Comments
 (0)