iterator) {
+ // initialize any member here.
+ this.iterator = iterator;
+ }
+
+ // Returns the next element in the iteration without advancing the iterator.
+ public Integer peek() {
+ if(next == NONE){
+ next = iterator.next();
+ }
+
+ return next;
+ }
+
+ // hasNext() and next() should behave the same as in the Iterator interface.
+ // Override them if needed.
+ @Override
+ public Integer next() {
+ if(next != NONE){
+ try{
+ return next;
+ } finally {
+ next = NONE;
+ }
+ }
+
+ return iterator.next();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return next != NONE || iterator.hasNext();
+ }
+}
diff --git a/peeking-iterator/index.md b/peeking-iterator/index.md
new file mode 100644
index 0000000..048d659
--- /dev/null
+++ b/peeking-iterator/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Peeking Iterator
+date: 2015-09-24 18:02:14+08:00
+leetcode_id: 284
+---
+{% include_relative README.md %}
diff --git a/permutation-sequence/index.md b/permutation-sequence/index.md
index 1956c27..a5192a4 100644
--- a/permutation-sequence/index.md
+++ b/permutation-sequence/index.md
@@ -4,6 +4,4 @@ title: Permutation Sequence
date: 2014-12-29 00:26:24 +0800
leetcode_id: 60
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/permutations-ii/index.md b/permutations-ii/index.md
index c81f239..84036ab 100644
--- a/permutations-ii/index.md
+++ b/permutations-ii/index.md
@@ -4,6 +4,4 @@ title: Permutations II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 47
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/permutations/index.md b/permutations/index.md
index 6b9e57c..a6708ec 100644
--- a/permutations/index.md
+++ b/permutations/index.md
@@ -4,6 +4,4 @@ title: Permutations
date: 2014-12-29 00:26:24 +0800
leetcode_id: 46
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/plus-one/index.md b/plus-one/index.md
index e04f238..102b564 100644
--- a/plus-one/index.md
+++ b/plus-one/index.md
@@ -4,6 +4,4 @@ title: Plus One
date: 2014-12-29 00:26:24 +0800
leetcode_id: 66
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/populating-next-right-pointers-in-each-node-ii/index.md b/populating-next-right-pointers-in-each-node-ii/index.md
index 262be19..f020fa6 100644
--- a/populating-next-right-pointers-in-each-node-ii/index.md
+++ b/populating-next-right-pointers-in-each-node-ii/index.md
@@ -4,6 +4,4 @@ title: Populating Next Right Pointers in Each Node II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 117
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/populating-next-right-pointers-in-each-node/index.md b/populating-next-right-pointers-in-each-node/index.md
index da292c2..8b48d7a 100644
--- a/populating-next-right-pointers-in-each-node/index.md
+++ b/populating-next-right-pointers-in-each-node/index.md
@@ -4,6 +4,4 @@ title: Populating Next Right Pointers in Each Node
date: 2014-12-29 00:26:24 +0800
leetcode_id: 116
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/power-of-two/README.md b/power-of-two/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/power-of-two/Solution.java b/power-of-two/Solution.java
new file mode 100644
index 0000000..9a4aae2
--- /dev/null
+++ b/power-of-two/Solution.java
@@ -0,0 +1,10 @@
+public class Solution {
+ public boolean isPowerOfTwo(int n) {
+ if(n == 0) return false;
+ if(n == 1) return true;
+
+ if(n % 2 == 1) return false;
+
+ return isPowerOfTwo(n / 2);
+ }
+}
diff --git a/power-of-two/index.md b/power-of-two/index.md
new file mode 100644
index 0000000..de9ef4b
--- /dev/null
+++ b/power-of-two/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Power of Two
+date: 2015-07-06 23:00:26+08:00
+leetcode_id: 231
+---
+{% include_relative README.md %}
diff --git a/powx-n/Solution.java b/powx-n/Solution.java
index f8e8026..d70d1b2 100644
--- a/powx-n/Solution.java
+++ b/powx-n/Solution.java
@@ -1,17 +1,14 @@
public class Solution {
- public double pow(double x, int n) {
- // Note: The Solution object is instantiated only once and is reused by each test case.
- if(n == 0) return 1;
+ public double myPow(double x, int n) {
- double s = pow(x, n /2);
+ if(n == 0) return 1;
- if(n % 2 == 0)
- return s * s;
- else if(n > 0)
- return s * s * x;
- else
- return s * s / x;
+ double s = myPow(x, n / 2);
+ if(n % 2 == 0) return s * s;
+ if(n > 0) return s * s * x;
+ // else n < 0
+ return s * s / x;
}
}
diff --git a/powx-n/index.md b/powx-n/index.md
index 3abcfb9..efe0fd2 100644
--- a/powx-n/index.md
+++ b/powx-n/index.md
@@ -1,9 +1,7 @@
---
layout: solution
title: Pow(x, n)
-date: 2014-12-29 00:26:24 +0800
+date: 2015-05-09 22:51:01 +0800
leetcode_id: 50
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/product-of-array-except-self/README.md b/product-of-array-except-self/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/product-of-array-except-self/Solution.java b/product-of-array-except-self/Solution.java
new file mode 100644
index 0000000..6a04e4a
--- /dev/null
+++ b/product-of-array-except-self/Solution.java
@@ -0,0 +1,25 @@
+public class Solution {
+ public int[] productExceptSelf(int[] nums) {
+ int[] output = new int[nums.length];
+
+ if(nums.length == 0) return output;
+
+ output[0] = nums[0];
+
+ for(int i = 1; i < nums.length; i++){
+ output[i] = output[i - 1] * nums[i];
+ }
+
+ output[nums.length - 1] = output[nums.length - 2] * 1;
+
+ int t = nums[nums.length - 1];
+ for(int i = output.length - 2; i > 0 ; i--){
+ output[i] = t * output[i - 1];
+ t *= nums[i];
+ }
+
+ output[0] = t;
+
+ return output;
+ }
+}
diff --git a/product-of-array-except-self/index.md b/product-of-array-except-self/index.md
new file mode 100644
index 0000000..f20523b
--- /dev/null
+++ b/product-of-array-except-self/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Product of Array Except Self
+date: 2015-07-26 17:23:07+08:00
+leetcode_id: 238
+---
+{% include_relative README.md %}
diff --git a/read-n-characters-given-read4-ii-call-multiple-times/index.md b/read-n-characters-given-read4-ii-call-multiple-times/index.md
index cc2df63..52a6c51 100644
--- a/read-n-characters-given-read4-ii-call-multiple-times/index.md
+++ b/read-n-characters-given-read4-ii-call-multiple-times/index.md
@@ -4,6 +4,4 @@ title: Read N Characters Given Read4 II - Call multiple times
date: 2014-12-29 00:26:24 +0800
leetcode_id: 158
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/read-n-characters-given-read4/index.md b/read-n-characters-given-read4/index.md
index 19a4f5e..111133f 100644
--- a/read-n-characters-given-read4/index.md
+++ b/read-n-characters-given-read4/index.md
@@ -4,6 +4,4 @@ title: Read N Characters Given Read4
date: 2014-12-29 00:26:24 +0800
leetcode_id: 157
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/recover-binary-search-tree/index.md b/recover-binary-search-tree/index.md
index 52ba332..3025e4c 100644
--- a/recover-binary-search-tree/index.md
+++ b/recover-binary-search-tree/index.md
@@ -4,6 +4,4 @@ title: Recover Binary Search Tree
date: 2014-12-29 00:26:24 +0800
leetcode_id: 99
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/rectangle-area/README.md b/rectangle-area/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/rectangle-area/Solution.java b/rectangle-area/Solution.java
new file mode 100644
index 0000000..d26cfec
--- /dev/null
+++ b/rectangle-area/Solution.java
@@ -0,0 +1,35 @@
+public class Solution {
+
+ int area(int x1, int y1, int x2, int y2){
+ return (y2 - y1) * (x2 - x1);
+ }
+
+ public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
+
+ // make sure left is left
+ if(A > E){
+ return computeArea(E, F, G, H, A, B, C, D);
+ }
+
+ int a = area(A, B, C, D) + area(E, F, G, H);
+
+ // no share case1
+ // [ ]C
+ // E[ ]
+ if(C < E){
+ return a;
+ }
+
+ // no share case2
+ // [ ]B
+ //
+ // [ ]H
+
+ if(B > H || F > D){
+ return a;
+ }
+
+ // remove share
+ return a - area(E, Math.max(B, F), Math.min(C, G), Math.min(D, H));
+ }
+}
diff --git a/rectangle-area/index.md b/rectangle-area/index.md
new file mode 100644
index 0000000..3303cd1
--- /dev/null
+++ b/rectangle-area/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Rectangle Area
+date: 2015-06-08 23:32:33+08:00
+leetcode_id: 223
+---
+{% include_relative README.md %}
diff --git a/regular-expression-matching/index.md b/regular-expression-matching/index.md
index 309dc29..3a07abc 100644
--- a/regular-expression-matching/index.md
+++ b/regular-expression-matching/index.md
@@ -4,6 +4,4 @@ title: Regular Expression Matching
date: 2014-12-29 00:26:24 +0800
leetcode_id: 10
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/remove-duplicates-from-sorted-array-ii/index.md b/remove-duplicates-from-sorted-array-ii/index.md
index e1f66e9..6150623 100644
--- a/remove-duplicates-from-sorted-array-ii/index.md
+++ b/remove-duplicates-from-sorted-array-ii/index.md
@@ -4,6 +4,4 @@ title: Remove Duplicates from Sorted Array II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 80
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/remove-duplicates-from-sorted-array/index.md b/remove-duplicates-from-sorted-array/index.md
index 4393d88..e09cbc4 100644
--- a/remove-duplicates-from-sorted-array/index.md
+++ b/remove-duplicates-from-sorted-array/index.md
@@ -4,6 +4,4 @@ title: Remove Duplicates from Sorted Array
date: 2014-12-29 00:26:24 +0800
leetcode_id: 26
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/remove-duplicates-from-sorted-list-ii/index.md b/remove-duplicates-from-sorted-list-ii/index.md
index 4d64ac1..0356ee4 100644
--- a/remove-duplicates-from-sorted-list-ii/index.md
+++ b/remove-duplicates-from-sorted-list-ii/index.md
@@ -4,6 +4,4 @@ title: Remove Duplicates from Sorted List II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 82
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/remove-duplicates-from-sorted-list/index.md b/remove-duplicates-from-sorted-list/index.md
index dbe930c..58728b3 100644
--- a/remove-duplicates-from-sorted-list/index.md
+++ b/remove-duplicates-from-sorted-list/index.md
@@ -4,6 +4,4 @@ title: Remove Duplicates from Sorted List
date: 2014-12-29 00:26:24 +0800
leetcode_id: 83
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/remove-element/index.md b/remove-element/index.md
index e868ba8..1a5ba21 100644
--- a/remove-element/index.md
+++ b/remove-element/index.md
@@ -4,6 +4,4 @@ title: Remove Element
date: 2014-12-29 00:26:24 +0800
leetcode_id: 27
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/remove-linked-list-elements/README.md b/remove-linked-list-elements/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/remove-linked-list-elements/Solution.java b/remove-linked-list-elements/Solution.java
new file mode 100644
index 0000000..c106a1e
--- /dev/null
+++ b/remove-linked-list-elements/Solution.java
@@ -0,0 +1,20 @@
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * int val;
+ * ListNode next;
+ * ListNode(int x) { val = x; }
+ * }
+ */
+public class Solution {
+ public ListNode removeElements(ListNode head, int val) {
+
+ if(head == null) return null;
+
+ if(head.val == val) return removeElements(head.next, val);
+
+ head.next = removeElements(head.next, val);
+
+ return head;
+ }
+}
diff --git a/remove-linked-list-elements/index.md b/remove-linked-list-elements/index.md
new file mode 100644
index 0000000..b594a2f
--- /dev/null
+++ b/remove-linked-list-elements/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Remove Linked List Elements
+date: 2015-04-23 11:39:56 +0800
+leetcode_id: 203
+---
+{% include_relative README.md %}
diff --git a/remove-nth-node-from-end-of-list/index.md b/remove-nth-node-from-end-of-list/index.md
index fb3fa2e..d604ea1 100644
--- a/remove-nth-node-from-end-of-list/index.md
+++ b/remove-nth-node-from-end-of-list/index.md
@@ -4,6 +4,4 @@ title: Remove Nth Node From End of List
date: 2014-12-29 00:26:24 +0800
leetcode_id: 19
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/reorder-list/README.md b/reorder-list/README.md
index deade0e..8230038 100644
--- a/reorder-list/README.md
+++ b/reorder-list/README.md
@@ -8,7 +8,7 @@ reorder can be achieved via
## Some O(n) method to deal with a linked list
-### Reverse a linked list
+### [Reverse a linked list](../reverse-linked-list)
1. walk through the linked list
1. set `node.next` to `prev`
diff --git a/reorder-list/index.md b/reorder-list/index.md
index 0d40da5..9128272 100644
--- a/reorder-list/index.md
+++ b/reorder-list/index.md
@@ -1,9 +1,7 @@
---
layout: solution
title: Reorder List
-date: 2014-12-29 00:26:24 +0800
+date: 2015-05-05 11:59:41 +0800
leetcode_id: 143
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/repeated-dna-sequences/index.md b/repeated-dna-sequences/index.md
index dc814f3..5e6ae50 100644
--- a/repeated-dna-sequences/index.md
+++ b/repeated-dna-sequences/index.md
@@ -4,6 +4,4 @@ title: Repeated DNA Sequences
date: 2015-03-08 01:16:06 +0800
leetcode_id: 187
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/restore-ip-addresses/Solution.java b/restore-ip-addresses/Solution.java
index 97f46f4..9c766c3 100644
--- a/restore-ip-addresses/Solution.java
+++ b/restore-ip-addresses/Solution.java
@@ -9,7 +9,7 @@ void findnum(String s, int p, int pstack){
if(pstack == 4){
if(p >= s.length()){
- String ip = "" + stack[0] + "." + stack[1] + "." + stack[2] + "." + stack[3];
+ String ip = String.join(".", stack);
collect.add(ip);
}
diff --git a/restore-ip-addresses/index.md b/restore-ip-addresses/index.md
index 36710a2..b5fb755 100644
--- a/restore-ip-addresses/index.md
+++ b/restore-ip-addresses/index.md
@@ -1,9 +1,7 @@
---
layout: solution
title: Restore IP Addresses
-date: 2014-12-29 00:26:24 +0800
+date: 2015-05-10 01:51:44 +0800
leetcode_id: 93
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/reverse-bits/index.md b/reverse-bits/index.md
index e5ef1de..bfffd23 100644
--- a/reverse-bits/index.md
+++ b/reverse-bits/index.md
@@ -4,6 +4,4 @@ title: Reverse Bits
date: 2015-03-07 19:36:21 +0800
leetcode_id: 190
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/reverse-integer/index.md b/reverse-integer/index.md
index 813d566..e47927f 100644
--- a/reverse-integer/index.md
+++ b/reverse-integer/index.md
@@ -4,6 +4,4 @@ title: Reverse Integer
date: 2015-01-18 03:14:54 +0800
leetcode_id: 7
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/reverse-linked-list-ii/index.md b/reverse-linked-list-ii/index.md
index d65f42e..2245e9a 100644
--- a/reverse-linked-list-ii/index.md
+++ b/reverse-linked-list-ii/index.md
@@ -4,6 +4,4 @@ title: Reverse Linked List II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 92
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/reverse-linked-list/README.md b/reverse-linked-list/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/reverse-linked-list/Solution.java b/reverse-linked-list/Solution.java
new file mode 100644
index 0000000..91aba69
--- /dev/null
+++ b/reverse-linked-list/Solution.java
@@ -0,0 +1,24 @@
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * int val;
+ * ListNode next;
+ * ListNode(int x) { val = x; }
+ * }
+ */
+public class Solution {
+ public ListNode reverseList(ListNode head) {
+
+ if(head == null) return null;
+ if(head.next == null) return head;
+
+ ListNode tail = head.next;
+ ListNode reversed = reverseList(head.next);
+
+ tail.next = head;
+
+ head.next = null;
+
+ return reversed;
+ }
+}
diff --git a/reverse-linked-list/index.md b/reverse-linked-list/index.md
new file mode 100644
index 0000000..865563e
--- /dev/null
+++ b/reverse-linked-list/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Reverse Linked List
+date: 2015-05-05 11:48:40 +0800
+leetcode_id: 206
+---
+{% include_relative README.md %}
diff --git a/reverse-nodes-in-k-group/Solution.java b/reverse-nodes-in-k-group/Solution.java
index 739b608..99bdc69 100644
--- a/reverse-nodes-in-k-group/Solution.java
+++ b/reverse-nodes-in-k-group/Solution.java
@@ -3,55 +3,53 @@
* public class ListNode {
* int val;
* ListNode next;
- * ListNode(int x) {
- * val = x;
- * next = null;
- * }
+ * ListNode(int x) { val = x; }
* }
*/
public class Solution {
+
+ ListNode reverse(ListNode head) {
+
+ ListNode prev = null;
+
+ while(head != null){
+ ListNode t = head.next;
+
+ head.next = prev;
+ prev = head;
+
+ head = t;
+ }
+
+ return prev;
+ }
+
public ListNode reverseKGroup(ListNode head, int k) {
- // IMPORTANT: Please reset any member data you declared, as
- // the same Solution instance will be reused for each test case.
if(k <= 1) return head;
-
if(head == null) return null;
if(head.next == null) return head;
ListNode tail = head;
- ListNode prev = null;
- for(int i = 0; i < k ; i++){
- if(head == null){
-
- // rollback
- head = prev;
- prev = null;
-
- while(head != null){
- ListNode t = head.next;
-
- head.next = prev;
- prev = head;
-
- head = t;
- }
-
- return prev;
- }
-
- ListNode t = head.next;
-
- head.next = prev;
- prev = head;
-
- head = t;
+ for(int i = 1; i < k && tail != null; i++){
+ tail = tail.next;
}
- tail.next = reverseKGroup(head, k);
+ if (tail == null) {
+ // less than k nodes
+ return head;
+ }
- return prev;
+ ListNode next = tail.next;
+ tail.next = null; // cut
+
+ tail = head; // head will be new tail
+ head = reverse(head);
+
+ tail.next = reverseKGroup(next, k);
+
+ return head;
}
-}
\ No newline at end of file
+}
diff --git a/reverse-nodes-in-k-group/index.md b/reverse-nodes-in-k-group/index.md
index b034ef5..d7e686d 100644
--- a/reverse-nodes-in-k-group/index.md
+++ b/reverse-nodes-in-k-group/index.md
@@ -1,9 +1,7 @@
---
layout: solution
title: Reverse Nodes in k-Group
-date: 2014-12-29 00:26:24 +0800
+date: 2015-05-09 02:43:34 +0800
leetcode_id: 25
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/reverse-words-in-a-string-ii/index.md b/reverse-words-in-a-string-ii/index.md
index 55be95a..b13b207 100644
--- a/reverse-words-in-a-string-ii/index.md
+++ b/reverse-words-in-a-string-ii/index.md
@@ -4,6 +4,4 @@ title: Reverse Words in a String II
date: 2015-02-03 14:42:33 +0800
leetcode_id: 186
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/reverse-words-in-a-string/index.md b/reverse-words-in-a-string/index.md
index 88bd05e..b6aab81 100644
--- a/reverse-words-in-a-string/index.md
+++ b/reverse-words-in-a-string/index.md
@@ -4,6 +4,4 @@ title: Reverse Words in a String
date: 2015-01-19 00:08:01 +0800
leetcode_id: 151
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/roman-to-integer/index.md b/roman-to-integer/index.md
index d99b286..3076c43 100644
--- a/roman-to-integer/index.md
+++ b/roman-to-integer/index.md
@@ -4,6 +4,4 @@ title: Roman to Integer
date: 2014-12-29 00:26:24 +0800
leetcode_id: 13
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/rotate-array/index.md b/rotate-array/index.md
index fd5a686..85eeb33 100644
--- a/rotate-array/index.md
+++ b/rotate-array/index.md
@@ -4,6 +4,4 @@ title: Rotate Array
date: 2015-03-04 01:39:57 +0800
leetcode_id: 189
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/rotate-image/index.md b/rotate-image/index.md
index f8a2719..7fcfdce 100644
--- a/rotate-image/index.md
+++ b/rotate-image/index.md
@@ -4,6 +4,4 @@ title: Rotate Image
date: 2014-12-29 00:26:24 +0800
leetcode_id: 48
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/rotate-list/Solution.java b/rotate-list/Solution.java
index efb2005..e978209 100644
--- a/rotate-list/Solution.java
+++ b/rotate-list/Solution.java
@@ -3,39 +3,36 @@
* public class ListNode {
* int val;
* ListNode next;
- * ListNode(int x) {
- * val = x;
- * next = null;
- * }
+ * ListNode(int x) { val = x; }
* }
*/
public class Solution {
- public ListNode rotateRight(ListNode head, int n) {
- // Note: The Solution object is instantiated only once and is reused by each test case.
+ public ListNode rotateRight(ListNode head, int k) {
if(head == null) return null;
- ListNode _head = head;
-
- ListNode node = head;
int len = 1;
- while(node.next != null){
+
+ ListNode tail = head;
+
+ while(tail.next != null){
len++;
- node = node.next;
+ tail = tail.next;
}
- n %= len;
-
- ListNode tail = node;
+ tail.next = head; // cycle
- node = head;
- for(int i = 0; i < len - n - 1; i++) node = node.next;
+ k %= len;
- tail.next = head;
- ListNode rt = node.next;
- node.next = null;
+ for(int i = 1; i < len - k; i++){
+ head = head.next;
+ }
- return rt;
+ try {
+ return head.next;
+ } finally {
+ head.next = null; // cut
+ }
}
-}
\ No newline at end of file
+}
diff --git a/rotate-list/index.md b/rotate-list/index.md
index 45258b7..c9539f8 100644
--- a/rotate-list/index.md
+++ b/rotate-list/index.md
@@ -1,9 +1,7 @@
---
layout: solution
title: Rotate List
-date: 2014-12-29 00:26:24 +0800
+date: 2015-05-10 00:33:24 +0800
leetcode_id: 61
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/same-tree/index.md b/same-tree/index.md
index b782b27..1c0024b 100644
--- a/same-tree/index.md
+++ b/same-tree/index.md
@@ -4,6 +4,4 @@ title: Same Tree
date: 2014-12-29 00:26:24 +0800
leetcode_id: 100
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/scramble-string/README.md b/scramble-string/README.md
index 8a42161..e7fe5bc 100644
--- a/scramble-string/README.md
+++ b/scramble-string/README.md
@@ -54,6 +54,8 @@ that means we can make a filter to remove all `set` must not take `0` as its fir
and `1` as it second and so on...
so we build a methd
+
+
```
check_has_char(pos, letter, two_part_set)
set = pos -> left_set or right_set depends on the two_part_set pivot
diff --git a/scramble-string/index.md b/scramble-string/index.md
index d53fff5..d377ad4 100644
--- a/scramble-string/index.md
+++ b/scramble-string/index.md
@@ -1,9 +1,7 @@
---
layout: solution
title: Scramble String
-date: 2014-12-29 00:26:24 +0800
+date: 2015-05-10 01:38:41 +0800
leetcode_id: 87
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/search-a-2d-matrix-ii/README.md b/search-a-2d-matrix-ii/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/search-a-2d-matrix-ii/Solution.java b/search-a-2d-matrix-ii/Solution.java
new file mode 100644
index 0000000..dbd55ab
--- /dev/null
+++ b/search-a-2d-matrix-ii/Solution.java
@@ -0,0 +1,32 @@
+public class Solution {
+
+ boolean searchMatrix(int[][] matrix, int stX, int stY, int edX, int edY, int target) {
+
+ if (stX >= edX || stY >= edY) return false;
+
+ int max = matrix[edX - 1][edY - 1];
+ int min = matrix[stX][stY];
+
+ // min <= target <= max
+ if (min <= target && target <= max){
+
+ int mdX = (stX + edX) / 2;
+ int mdY = (stY + edY) / 2;
+
+ if(matrix[mdX][mdY] == target){
+ return true;
+ }
+
+ return searchMatrix(matrix, stX, stY, mdX, mdY, target) ||
+ searchMatrix(matrix, stX, mdY, mdX, edY, target) ||
+ searchMatrix(matrix, mdX, stY, edX, mdY, target) ||
+ searchMatrix(matrix, mdX, mdY, edX, edY, target);
+ }
+
+ return false;
+ }
+
+ public boolean searchMatrix(int[][] matrix, int target) {
+ return searchMatrix(matrix, 0, 0, matrix.length, matrix[0].length, target);
+ }
+}
diff --git a/search-a-2d-matrix-ii/index.md b/search-a-2d-matrix-ii/index.md
new file mode 100644
index 0000000..c67abeb
--- /dev/null
+++ b/search-a-2d-matrix-ii/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Search a 2D Matrix II
+date: 2015-07-26 14:40:48+08:00
+leetcode_id: 240
+---
+{% include_relative README.md %}
diff --git a/search-a-2d-matrix/index.md b/search-a-2d-matrix/index.md
index daf935f..20286a4 100644
--- a/search-a-2d-matrix/index.md
+++ b/search-a-2d-matrix/index.md
@@ -4,6 +4,4 @@ title: Search a 2D Matrix
date: 2014-12-29 00:26:24 +0800
leetcode_id: 74
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/search-for-a-range/index.md b/search-for-a-range/index.md
index dd9c71b..b60cba3 100644
--- a/search-for-a-range/index.md
+++ b/search-for-a-range/index.md
@@ -4,6 +4,4 @@ title: Search for a Range
date: 2014-12-29 00:26:24 +0800
leetcode_id: 34
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/search-in-rotated-sorted-array-ii/index.md b/search-in-rotated-sorted-array-ii/index.md
index 8139bb6..81594de 100644
--- a/search-in-rotated-sorted-array-ii/index.md
+++ b/search-in-rotated-sorted-array-ii/index.md
@@ -4,6 +4,4 @@ title: Search in Rotated Sorted Array II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 81
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/search-in-rotated-sorted-array/index.md b/search-in-rotated-sorted-array/index.md
index 2215282..6167729 100644
--- a/search-in-rotated-sorted-array/index.md
+++ b/search-in-rotated-sorted-array/index.md
@@ -4,6 +4,4 @@ title: Search in Rotated Sorted Array
date: 2014-12-29 00:26:24 +0800
leetcode_id: 33
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/search-insert-position/index.md b/search-insert-position/index.md
index 303314f..ec3700e 100644
--- a/search-insert-position/index.md
+++ b/search-insert-position/index.md
@@ -4,6 +4,4 @@ title: Search Insert Position
date: 2014-12-29 00:26:24 +0800
leetcode_id: 35
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/set-matrix-zeroes/index.md b/set-matrix-zeroes/index.md
index ab5f6ca..7e0f220 100644
--- a/set-matrix-zeroes/index.md
+++ b/set-matrix-zeroes/index.md
@@ -4,6 +4,4 @@ title: Set Matrix Zeroes
date: 2014-12-29 00:26:24 +0800
leetcode_id: 73
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/shortest-palindrome/README.md b/shortest-palindrome/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/shortest-palindrome/Solution.java b/shortest-palindrome/Solution.java
new file mode 100644
index 0000000..74f385a
--- /dev/null
+++ b/shortest-palindrome/Solution.java
@@ -0,0 +1,50 @@
+public class Solution {
+ public String shortestPalindrome(String s) {
+ char[] S = s.toCharArray();
+
+ int[] P = new int[S.length];
+
+ for(int i = S.length - 2; i >= 0; i--){
+ if(S[i] == S[i + 1]){
+ P[i] = P[i + 1] + 1;
+ }
+ }
+
+ int i = 0;
+ int e = S.length - 1;
+
+ int j = e;
+
+ while(i < j){
+
+ if(S[i] == S[j]){
+
+ i++;
+ j--;
+
+ } else {
+
+ if(P[j] >= i){
+ j--;
+ e--;
+
+ } else if(i > 0) {
+
+ i = 0;
+ e = j;
+
+ } else {
+
+ j = e - 1;
+ e--;
+ }
+ }
+ }
+
+ StringBuilder sb = new StringBuilder(new String(S, e + 1, S.length - e - 1)).reverse();
+
+ sb.append(s);
+
+ return sb.toString();
+ }
+}
diff --git a/shortest-palindrome/index.md b/shortest-palindrome/index.md
new file mode 100644
index 0000000..aa04491
--- /dev/null
+++ b/shortest-palindrome/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Shortest Palindrome
+date: 2015-05-26 01:19:56+08:00
+leetcode_id: 214
+---
+{% include_relative README.md %}
diff --git a/shortest-word-distance/README.md b/shortest-word-distance/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/shortest-word-distance/Solution.java b/shortest-word-distance/Solution.java
new file mode 100644
index 0000000..2510f2e
--- /dev/null
+++ b/shortest-word-distance/Solution.java
@@ -0,0 +1,23 @@
+public class Solution {
+ public int shortestDistance(String[] words, String word1, String word2) {
+
+ int len = words.length;
+
+ int i1 = -1;
+ int i2 = -1;
+
+ for(int i = 0; i < words.length; i++){
+ if(word1.equals(words[i])){
+ i1 = i;
+ }else if(word2.equals(words[i])){
+ i2 = i;
+ }
+
+ if(i1 >= 0 && i2 >= 0){
+ len = Math.min(len, Math.abs(i1 - i2));
+ }
+ }
+
+ return len;
+ }
+}
diff --git a/shortest-word-distance/index.md b/shortest-word-distance/index.md
new file mode 100644
index 0000000..93c70ba
--- /dev/null
+++ b/shortest-word-distance/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Shortest Word Distance
+date: 2015-08-17 01:11:54+08:00
+leetcode_id: 243
+---
+{% include_relative README.md %}
diff --git a/simplify-path/index.md b/simplify-path/index.md
index cd0d98a..924e27c 100644
--- a/simplify-path/index.md
+++ b/simplify-path/index.md
@@ -4,6 +4,4 @@ title: Simplify Path
date: 2015-01-29 15:17:38 +0800
leetcode_id: 71
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/single-number-ii/index.md b/single-number-ii/index.md
index 49a8ae8..b8d1972 100644
--- a/single-number-ii/index.md
+++ b/single-number-ii/index.md
@@ -4,6 +4,4 @@ title: Single Number II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 137
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/single-number-iii/README.md b/single-number-iii/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/single-number-iii/Solution.java b/single-number-iii/Solution.java
new file mode 100644
index 0000000..0d6ea7e
--- /dev/null
+++ b/single-number-iii/Solution.java
@@ -0,0 +1,21 @@
+public class Solution {
+ public int[] singleNumber(int[] nums) {
+ int aXORb = nums[0];
+
+ for(int i = 1; i < nums.length; i++){
+ aXORb ^= nums[i];
+ }
+
+ // this bit either in a or b
+ int bit = Integer.lowestOneBit(aXORb);
+
+ int a = 0;
+ for(int n : nums){
+ if((n & bit) == bit){
+ a ^= n;
+ }
+ }
+
+ return new int[]{a, aXORb ^ a};
+ }
+}
diff --git a/single-number-iii/index.md b/single-number-iii/index.md
new file mode 100644
index 0000000..669d318
--- /dev/null
+++ b/single-number-iii/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Single Number III
+date: 2015-08-25 00:56:56+08:00
+leetcode_id: 260
+---
+{% include_relative README.md %}
diff --git a/single-number/index.md b/single-number/index.md
index 8f9175d..d639686 100644
--- a/single-number/index.md
+++ b/single-number/index.md
@@ -4,6 +4,4 @@ title: Single Number
date: 2014-12-29 00:26:24 +0800
leetcode_id: 136
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/skeleton.sh b/skeleton.sh
index c249e26..54a550e 100755
--- a/skeleton.sh
+++ b/skeleton.sh
@@ -7,6 +7,16 @@ if [ -z "$leetcode_name" ]; then
exit;
fi
+info=`curl -s https://leetcode.com/problemset/algorithms/ | grep /$leetcode_name/ -B 2`
+IFS=
+leetcode_id=`(sed 's/\\(.*\\)<\\/td>/\\1/' | sed 's/^ *//') < <(echo $info | head -n 1)`
+title=`(sed 's/\\(.*\\)<\\/a>/\\1/' | sed 's/^ *//') < <(echo $info | tail -n 1)`
+
+if [ -z "$leetcode_id" ]; then
+ echo "cant fetch leetcode_id for $leetcode_name"
+ exit
+fi
+
now=`date --rfc-3339=seconds`
mkdir -p $leetcode_name
@@ -16,13 +26,11 @@ mkdir -p $leetcode_name
cat > $leetcode_name/index.md < queue = new LinkedList<>();
+
+ SlidingMaxQueue(int[] nums, int k){
+ this.nums = nums;
+ this.k = k;
+ }
+
+ int max(){
+ return nums[queue.peekFirst()];
+ }
+
+ void add(int i){
+
+ if(i >= nums.length) return;
+
+ // remove invalid index
+ while(!queue.isEmpty() && queue.peekFirst() <= i - k){
+ queue.pollFirst();
+ }
+
+ // remove nums < current;
+ while(!queue.isEmpty() && nums[queue.peekLast()] < nums[i]){
+ queue.pollLast();
+ }
+
+ queue.add(i);
+ }
+ }
+
+ public int[] maxSlidingWindow(int[] nums, int k) {
+
+ int[] T = new int[Math.min(nums.length - k + 1, nums.length)];
+
+ SlidingMaxQueue Q = new SlidingMaxQueue(nums, k);
+
+ Q.add(0);
+
+ for(int i = 1; i <= nums.length; i++){
+ T[Math.max(i - k, 0)] = Q.max();
+ Q.add(i);
+ }
+
+ return T;
+ }
+}
diff --git a/sliding-window-maximum/index.md b/sliding-window-maximum/index.md
new file mode 100644
index 0000000..bdcd880
--- /dev/null
+++ b/sliding-window-maximum/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Sliding Window Maximum
+date: 2015-07-26 16:53:20+08:00
+leetcode_id: 239
+---
+{% include_relative README.md %}
diff --git a/sort-colors/index.md b/sort-colors/index.md
index 81eaad5..ea77fbb 100644
--- a/sort-colors/index.md
+++ b/sort-colors/index.md
@@ -4,6 +4,4 @@ title: Sort Colors
date: 2015-01-22 01:52:46 +0800
leetcode_id: 75
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/sort-list/index.md b/sort-list/index.md
index f6ac98d..9dcd802 100644
--- a/sort-list/index.md
+++ b/sort-list/index.md
@@ -4,6 +4,4 @@ title: Sort List
date: 2014-12-29 00:26:24 +0800
leetcode_id: 148
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/spiral-matrix-ii/index.md b/spiral-matrix-ii/index.md
index fa9813a..e624bf8 100644
--- a/spiral-matrix-ii/index.md
+++ b/spiral-matrix-ii/index.md
@@ -4,6 +4,4 @@ title: Spiral Matrix II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 59
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/spiral-matrix/index.md b/spiral-matrix/index.md
index 99c8006..e68647e 100644
--- a/spiral-matrix/index.md
+++ b/spiral-matrix/index.md
@@ -4,6 +4,4 @@ title: Spiral Matrix
date: 2014-12-29 00:26:24 +0800
leetcode_id: 54
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/sqrtx/index.md b/sqrtx/index.md
index 31cc78c..909dcc2 100644
--- a/sqrtx/index.md
+++ b/sqrtx/index.md
@@ -4,6 +4,4 @@ title: Sqrt(x)
date: 2015-01-18 23:48:07 +0800
leetcode_id: 69
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/string-to-integer-atoi/index.md b/string-to-integer-atoi/index.md
index 70484c6..3304230 100644
--- a/string-to-integer-atoi/index.md
+++ b/string-to-integer-atoi/index.md
@@ -4,6 +4,4 @@ title: String to Integer (atoi)
date: 2014-12-29 00:26:24 +0800
leetcode_id: 8
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/strobogrammatic-number/README.md b/strobogrammatic-number/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/strobogrammatic-number/Solution.java b/strobogrammatic-number/Solution.java
new file mode 100644
index 0000000..b3fea63
--- /dev/null
+++ b/strobogrammatic-number/Solution.java
@@ -0,0 +1,33 @@
+public class Solution {
+
+ static final char[][] GOOD_PATTERNS = {
+ {'9', '6'},
+ {'6', '9'},
+ {'1', '1'},
+ {'8', '8'},
+ {'0', '0'},
+ };
+
+ boolean isStrobogrammatic(char l, char r){
+ char[] s = new char[]{l, r};
+
+ for(char[] g : GOOD_PATTERNS){
+ if(Arrays.equals(g, s)){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isStrobogrammatic(String num) {
+ char[] S = num.toCharArray();
+
+ for(int i = 0; i <= S.length / 2; i++){
+ if(!isStrobogrammatic(S[i], S[S.length - 1 - i])){
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/strobogrammatic-number/index.md b/strobogrammatic-number/index.md
new file mode 100644
index 0000000..36a151a
--- /dev/null
+++ b/strobogrammatic-number/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Strobogrammatic Number
+date: 2015-08-06 22:24:30+08:00
+leetcode_id: 246
+---
+{% include_relative README.md %}
diff --git a/subsets-ii/index.md b/subsets-ii/index.md
index a8e086a..d3de772 100644
--- a/subsets-ii/index.md
+++ b/subsets-ii/index.md
@@ -4,6 +4,4 @@ title: Subsets II
date: 2015-02-13 01:14:40 +0800
leetcode_id: 90
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/subsets/index.md b/subsets/index.md
index e7401c2..4264933 100644
--- a/subsets/index.md
+++ b/subsets/index.md
@@ -4,6 +4,4 @@ title: Subsets
date: 2015-02-13 01:10:10 +0800
leetcode_id: 78
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/substring-with-concatenation-of-all-words/index.md b/substring-with-concatenation-of-all-words/index.md
index 3827ff6..54e5fe3 100644
--- a/substring-with-concatenation-of-all-words/index.md
+++ b/substring-with-concatenation-of-all-words/index.md
@@ -4,6 +4,4 @@ title: Substring with Concatenation of All Words
date: 2014-12-29 00:26:24 +0800
leetcode_id: 30
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/sudoku-solver/index.md b/sudoku-solver/index.md
index 533f205..4953517 100644
--- a/sudoku-solver/index.md
+++ b/sudoku-solver/index.md
@@ -4,6 +4,4 @@ title: Sudoku Solver
date: 2014-12-29 00:26:24 +0800
leetcode_id: 37
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/sum-root-to-leaf-numbers/index.md b/sum-root-to-leaf-numbers/index.md
index ebd2a0f..ed920b0 100644
--- a/sum-root-to-leaf-numbers/index.md
+++ b/sum-root-to-leaf-numbers/index.md
@@ -4,6 +4,4 @@ title: Sum Root to Leaf Numbers
date: 2015-01-16 16:07:02 -0500
leetcode_id: 129
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/summary-ranges/README.md b/summary-ranges/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/summary-ranges/Solution.java b/summary-ranges/Solution.java
new file mode 100644
index 0000000..f37335b
--- /dev/null
+++ b/summary-ranges/Solution.java
@@ -0,0 +1,41 @@
+public class Solution {
+
+ static class Range {
+
+ int st;
+ int ed;
+
+ Range(int st){
+ this.st = st;
+ this.ed = st;
+ }
+
+ public String toString(){
+ if(ed == st) return "" + st;
+
+ return st + "->" + ed;
+ }
+ }
+
+ public List summaryRanges(int[] nums) {
+
+ ArrayList rt = new ArrayList<>();
+
+ if(nums.length == 0) return rt;
+
+ Range r = new Range(nums[0]);
+
+ for(int i = 1; i < nums.length; i++){
+ if(nums[i] - r.ed == 1){
+ r.ed = nums[i];
+ } else {
+ rt.add(r.toString());
+ r = new Range(nums[i]);
+ }
+ }
+
+ rt.add(r.toString());
+
+ return rt;
+ }
+}
diff --git a/summary-ranges/index.md b/summary-ranges/index.md
new file mode 100644
index 0000000..6fb65ed
--- /dev/null
+++ b/summary-ranges/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Summary Ranges
+date: 2015-06-28 15:35:53+08:00
+leetcode_id: 228
+---
+{% include_relative README.md %}
diff --git a/surrounded-regions/index.md b/surrounded-regions/index.md
index 0cabbe2..7e48167 100644
--- a/surrounded-regions/index.md
+++ b/surrounded-regions/index.md
@@ -4,6 +4,4 @@ title: Surrounded Regions
date: 2014-12-29 00:26:24 +0800
leetcode_id: 130
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/swap-nodes-in-pairs/index.md b/swap-nodes-in-pairs/index.md
index 409f48c..dcbf2db 100644
--- a/swap-nodes-in-pairs/index.md
+++ b/swap-nodes-in-pairs/index.md
@@ -4,6 +4,4 @@ title: Swap Nodes in Pairs
date: 2014-12-29 00:26:24 +0800
leetcode_id: 24
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/symmetric-tree/index.md b/symmetric-tree/index.md
index cbce220..bde57f8 100644
--- a/symmetric-tree/index.md
+++ b/symmetric-tree/index.md
@@ -4,6 +4,4 @@ title: Symmetric Tree
date: 2014-12-29 00:26:24 +0800
leetcode_id: 101
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/text-justification/index.md b/text-justification/index.md
index 11f1826..2990eb3 100644
--- a/text-justification/index.md
+++ b/text-justification/index.md
@@ -4,6 +4,4 @@ title: Text Justification
date: 2014-12-29 00:26:24 +0800
leetcode_id: 68
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/the-skyline-problem/README.md b/the-skyline-problem/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/the-skyline-problem/Solution.java b/the-skyline-problem/Solution.java
new file mode 100644
index 0000000..ff2b372
--- /dev/null
+++ b/the-skyline-problem/Solution.java
@@ -0,0 +1,124 @@
+public class Solution {
+ static int li(int[] building){
+ return building[0];
+ }
+
+ static int ri(int[] building){
+ return building[1];
+ }
+
+ static int hi(int[] building){
+ return building[2];
+ }
+
+ static class SortedBuilds {
+ int[][] buildings;
+ int p = 0;
+
+ PriorityQueue inserted = new PriorityQueue<>((a, b) -> li(a) - li(b));
+
+ SortedBuilds(int[][] buildings) {
+ this.buildings = buildings;
+ }
+
+ boolean hasNext(){
+ return p < buildings.length || !inserted.isEmpty();
+ }
+
+
+ int[] next(){
+
+ if(p < buildings.length && !inserted.isEmpty()){
+
+ if(li(buildings[p]) < li(inserted.peek())){
+ return buildings[p++];
+ }else{
+ return inserted.poll();
+ }
+
+ } else if(p < buildings.length ){
+ return buildings[p++];
+ } else { // !inserted.isEmpty())
+ return inserted.poll();
+ }
+
+ }
+
+ void insert(int[] building){
+ inserted.add(building);
+ }
+ }
+
+ public List getSkyline(int[][] buildings) {
+
+ List all = new ArrayList<>();
+ if(buildings.length == 0) return all;
+
+ SortedBuilds sortedBuilds = new SortedBuilds(buildings);
+
+ int[] a = sortedBuilds.next();
+
+ while (sortedBuilds.hasNext()){
+ int[] b = sortedBuilds.next();
+
+ if(ri(a) == li(b) && hi(a) == hi(b)){
+ a = new int[]{li(a), ri(b), hi(a)};
+ continue;
+ }
+
+ // a.r b.l
+ if(ri(a) <= li(b)){
+ all.add(new int[]{li(a), hi(a)});
+
+ if(ri(a) < li(b)){
+ all.add(new int[]{ri(a), 0});
+ }
+
+ a = b;
+ continue;
+ }
+
+ // a.l b.l
+ if(li(a) == li(b)){
+
+ // make a higher than b
+ if(hi(a) < hi(b)){
+ sortedBuilds.insert(a);
+ a = b;
+ continue;
+ }
+
+ if(ri(a) < ri(b)){
+ sortedBuilds.insert(new int[]{ri(a), ri(b), hi(b)});
+ }
+ // else drop b (b inside a)
+ continue;
+ }
+
+ //
+ if(hi(a) < hi(b)){
+
+ all.add(new int[]{li(a), hi(a)});
+
+ if(ri(a) > ri(b)){
+ sortedBuilds.insert(new int[]{ri(b), ri(a), hi(a)});
+ }
+
+ a = b;
+ continue;
+ }
+
+ // a.h >= b.h
+
+ if(ri(a) < ri(b)){
+ sortedBuilds.insert(new int[]{ri(a), ri(b), hi(b)});
+ }
+ // else drop b (b inside a)
+ }
+
+ all.add(new int[]{li(a), hi(a)});
+ all.add(new int[]{ri(a), 0});
+
+ return all;
+ }
+}
diff --git a/the-skyline-problem/index.md b/the-skyline-problem/index.md
new file mode 100644
index 0000000..7e48923
--- /dev/null
+++ b/the-skyline-problem/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: The Skyline Problem
+date: 2015-05-28 19:45:44+08:00
+leetcode_id: 218
+---
+{% include_relative README.md %}
diff --git a/trapping-rain-water/index.md b/trapping-rain-water/index.md
index cfa47c3..db8107d 100644
--- a/trapping-rain-water/index.md
+++ b/trapping-rain-water/index.md
@@ -4,6 +4,4 @@ title: Trapping Rain Water
date: 2014-12-29 00:26:24 +0800
leetcode_id: 42
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/triangle/index.md b/triangle/index.md
index 15935f4..ad75db1 100644
--- a/triangle/index.md
+++ b/triangle/index.md
@@ -4,6 +4,4 @@ title: Triangle
date: 2015-03-20 12:51:52 +0800
leetcode_id: 120
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/two-sum-ii-input-array-is-sorted/index.md b/two-sum-ii-input-array-is-sorted/index.md
index fd0423c..624ff8c 100644
--- a/two-sum-ii-input-array-is-sorted/index.md
+++ b/two-sum-ii-input-array-is-sorted/index.md
@@ -4,6 +4,4 @@ title: Two Sum II - Input array is sorted
date: 2015-01-23 12:45:49 +0800
leetcode_id: 167
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/two-sum-iii-data-structure-design/index.md b/two-sum-iii-data-structure-design/index.md
index 56f45d1..bd983e9 100644
--- a/two-sum-iii-data-structure-design/index.md
+++ b/two-sum-iii-data-structure-design/index.md
@@ -4,6 +4,4 @@ title: Two Sum III - Data structure design
date: 2015-01-21 18:05:09 +0800
leetcode_id: 170
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/two-sum/index.md b/two-sum/index.md
index c4e3e82..4ccaf5a 100644
--- a/two-sum/index.md
+++ b/two-sum/index.md
@@ -3,8 +3,5 @@ layout: solution
title: Two Sum
date: 2014-12-29 00:26:24 +0800
leetcode_id: 1
-leetcode_id: 1
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/unique-binary-search-trees-ii/index.md b/unique-binary-search-trees-ii/index.md
index e6ab9be..4947ffe 100644
--- a/unique-binary-search-trees-ii/index.md
+++ b/unique-binary-search-trees-ii/index.md
@@ -4,6 +4,4 @@ title: Unique Binary Search Trees II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 95
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/unique-binary-search-trees/index.md b/unique-binary-search-trees/index.md
index b25c64f..697affa 100644
--- a/unique-binary-search-trees/index.md
+++ b/unique-binary-search-trees/index.md
@@ -4,6 +4,4 @@ title: Unique Binary Search Trees
date: 2014-12-29 00:26:24 +0800
leetcode_id: 96
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/unique-paths-ii/index.md b/unique-paths-ii/index.md
index 124cfbe..9b6ffcb 100644
--- a/unique-paths-ii/index.md
+++ b/unique-paths-ii/index.md
@@ -4,6 +4,4 @@ title: Unique Paths II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 63
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/unique-paths/index.md b/unique-paths/index.md
index 33a3fc3..e2a8bf3 100644
--- a/unique-paths/index.md
+++ b/unique-paths/index.md
@@ -4,6 +4,4 @@ title: Unique Paths
date: 2014-12-29 00:26:24 +0800
leetcode_id: 62
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/valid-anagram/README.md b/valid-anagram/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/valid-anagram/Solution.java b/valid-anagram/Solution.java
new file mode 100644
index 0000000..5e64451
--- /dev/null
+++ b/valid-anagram/Solution.java
@@ -0,0 +1,11 @@
+public class Solution {
+ public boolean isAnagram(String s, String t) {
+ char[] S = s.toCharArray();
+ char[] T = t.toCharArray();
+
+ Arrays.sort(S);
+ Arrays.sort(T);
+
+ return Arrays.equals(S, T);
+ }
+}
diff --git a/valid-anagram/index.md b/valid-anagram/index.md
new file mode 100644
index 0000000..cec6d9b
--- /dev/null
+++ b/valid-anagram/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Valid Anagram
+date: 2015-08-06 22:22:20+08:00
+leetcode_id: 242
+---
+{% include_relative README.md %}
diff --git a/valid-number/index.md b/valid-number/index.md
index 9d189a4..f9cf82c 100644
--- a/valid-number/index.md
+++ b/valid-number/index.md
@@ -4,6 +4,4 @@ title: Valid Number
date: 2014-12-29 00:26:24 +0800
leetcode_id: 65
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/valid-palindrome/index.md b/valid-palindrome/index.md
index 69bfcac..bccb9c0 100644
--- a/valid-palindrome/index.md
+++ b/valid-palindrome/index.md
@@ -4,6 +4,4 @@ title: Valid Palindrome
date: 2014-12-29 00:26:24 +0800
leetcode_id: 125
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/valid-parentheses/index.md b/valid-parentheses/index.md
index 0a0e687..22f698f 100644
--- a/valid-parentheses/index.md
+++ b/valid-parentheses/index.md
@@ -4,6 +4,4 @@ title: Valid Parentheses
date: 2014-12-29 00:26:24 +0800
leetcode_id: 20
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/valid-sudoku/index.md b/valid-sudoku/index.md
index ff1e19f..5ee9111 100644
--- a/valid-sudoku/index.md
+++ b/valid-sudoku/index.md
@@ -4,6 +4,4 @@ title: Valid Sudoku
date: 2014-12-29 00:26:24 +0800
leetcode_id: 36
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/validate-binary-search-tree/index.md b/validate-binary-search-tree/index.md
index 716ea48..4b79c08 100644
--- a/validate-binary-search-tree/index.md
+++ b/validate-binary-search-tree/index.md
@@ -4,6 +4,4 @@ title: Validate Binary Search Tree
date: 2014-12-29 00:26:24 +0800
leetcode_id: 98
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/verify-preorder-sequence-in-binary-search-tree/README.md b/verify-preorder-sequence-in-binary-search-tree/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/verify-preorder-sequence-in-binary-search-tree/Solution.java b/verify-preorder-sequence-in-binary-search-tree/Solution.java
new file mode 100644
index 0000000..5ff0cb8
--- /dev/null
+++ b/verify-preorder-sequence-in-binary-search-tree/Solution.java
@@ -0,0 +1,31 @@
+public class Solution {
+ public boolean verifyPreorder(int[] preorder) {
+ int[] inorder = Arrays.copyOf(preorder, preorder.length);
+ Arrays.sort(inorder);
+
+ LinkedList stack = new LinkedList<>(); // fuck
+
+ stack.push(0);
+ stack.push(inorder.length);
+
+ for(int p = 0; p < preorder.length; /*void*/){
+ int ed = stack.pop();
+ int st = stack.pop();
+
+ if(st >= ed) continue;
+
+ int root = preorder[p++];
+
+ int i = Arrays.binarySearch(inorder, st, ed, root);
+ if(i < 0) return false;
+
+ stack.push(i + 1);
+ stack.push(ed);
+
+ stack.push(st);
+ stack.push(i);
+ }
+
+ return true;
+ }
+}
diff --git a/verify-preorder-sequence-in-binary-search-tree/index.md b/verify-preorder-sequence-in-binary-search-tree/index.md
new file mode 100644
index 0000000..48b4017
--- /dev/null
+++ b/verify-preorder-sequence-in-binary-search-tree/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Verify Preorder Sequence in Binary Search Tree
+date: 2015-08-15 11:47:30+08:00
+leetcode_id: 255
+---
+{% include_relative README.md %}
diff --git a/wildcard-matching/index.md b/wildcard-matching/index.md
index 7e5947e..59064c9 100644
--- a/wildcard-matching/index.md
+++ b/wildcard-matching/index.md
@@ -4,6 +4,4 @@ title: Wildcard Matching
date: 2014-12-29 00:26:24 +0800
leetcode_id: 44
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/word-break-ii/Solution.java b/word-break-ii/Solution.java
index 11df5fe..8873f6e 100644
--- a/word-break-ii/Solution.java
+++ b/word-break-ii/Solution.java
@@ -1,18 +1,5 @@
public class Solution {
- String join(List list){
- if(list.isEmpty()) return "";
-
- StringBuilder s = new StringBuilder(list.get(0));
-
- for(int i = 1; i < list.size(); i++){
- s.append(' ');
- s.append(list.get(i));
- }
-
- return s.toString();
- }
-
ArrayList[] P;
char[] S;
ArrayList rt;
@@ -21,7 +8,7 @@ void joinAll(int offset, LinkedList parents){
if(P[offset].isEmpty()){
- rt.add(join(parents));
+ rt.add(String.join(" ", parents));
return;
}
diff --git a/word-break-ii/index.md b/word-break-ii/index.md
index 1f81e4d..6bc758c 100644
--- a/word-break-ii/index.md
+++ b/word-break-ii/index.md
@@ -1,9 +1,7 @@
---
layout: solution
title: Word Break II
-date: 2014-12-29 00:26:24 +0800
+date: 2015-05-11 00:01:22 +0800
leetcode_id: 140
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/word-break/index.md b/word-break/index.md
index 69f62cf..784221f 100644
--- a/word-break/index.md
+++ b/word-break/index.md
@@ -4,6 +4,4 @@ title: Word Break
date: 2014-12-29 00:26:24 +0800
leetcode_id: 139
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/word-ladder-ii/index.md b/word-ladder-ii/index.md
index a76b3dd..e5f6699 100644
--- a/word-ladder-ii/index.md
+++ b/word-ladder-ii/index.md
@@ -4,6 +4,4 @@ title: Word Ladder II
date: 2014-12-29 00:26:24 +0800
leetcode_id: 126
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/word-ladder/index.md b/word-ladder/index.md
index 9458dce..e0df4cf 100644
--- a/word-ladder/index.md
+++ b/word-ladder/index.md
@@ -4,6 +4,4 @@ title: Word Ladder
date: 2014-12-29 00:26:24 +0800
leetcode_id: 127
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/word-search-ii/README.md b/word-search-ii/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/word-search-ii/Solution.java b/word-search-ii/Solution.java
new file mode 100644
index 0000000..1107f8b
--- /dev/null
+++ b/word-search-ii/Solution.java
@@ -0,0 +1,141 @@
+public class Solution {
+
+ static class TrieNode {
+ // Initialize your data structure here.
+ TrieNode parent;
+ int depth = 0;
+
+ char character;
+
+ TrieNode[] children = new TrieNode[26];
+
+ int count = 0;
+
+ public TrieNode(TrieNode parent, char character) {
+ this.parent = parent;
+ this.character = character;
+
+ if(parent != null) {
+ this.depth = parent.depth + 1;
+ }
+ }
+
+ TrieNode safe(char c){
+ int i = index(c);
+
+ if(children[i] == null){
+ children[i] = new TrieNode(this, c);
+ }
+
+ return children[i];
+ }
+
+ int index(char c){
+ return (int)(c - 'a');
+ }
+
+ void insert(char[] word, int st, int len){
+ if(len == 0){
+ this.count++;
+ return;
+ }
+
+ TrieNode t = safe(word[st]);
+
+ t.insert(word, st + 1, len - 1);
+ }
+
+ TrieNode child(char c){
+ return children[index(c)];
+ }
+
+ boolean hasChild(char c){
+ return child(c) != null;
+ }
+
+ String recover(){
+ // assert count > 0
+ TrieNode t = this;
+ char[] s = new char[depth];
+
+ for(int i = depth - 1; i >= 0; i--){
+ s[i] = t.character;
+ t = t.parent;
+ }
+
+ return new String(s);
+ }
+ }
+
+ int flatten(int x, int y, int wide){
+ return x * wide + y;
+ }
+
+ boolean vaild(int x, int y, char[][] board){
+ return x >= 0 &&
+ y >= 0 &&
+ x < board.length &&
+ y < board[0].length;
+ }
+
+ Set found = new HashSet<>();
+
+ void findWords(int x, int y, char[][] board, boolean[] vi, TrieNode current) {
+
+ vi[flatten(x, y, board[0].length)] = true;
+
+ if(current.count > 0){
+ found.add(current.recover());
+ }
+
+ for(int[] xy : new int[][] {
+ {x + 1, y},
+ {x, y + 1},
+ {x - 1, y},
+ {x, y - 1},
+ }) {
+ int _x = xy[0];
+ int _y = xy[1];
+
+ if(!vaild(_x, _y, board)){
+ continue;
+ }
+
+ if(vi[flatten(_x, _y, board[0].length)]) {
+ continue;
+ }
+
+ TrieNode t = current.child(board[_x][_y]);
+
+ if(t == null){
+ continue;
+ }
+
+ findWords(_x, _y, board, vi, t);
+
+ vi[flatten(_x, _y, board[0].length)] = false;
+ }
+
+ }
+
+ public List findWords(char[][] board, String[] words) {
+
+ TrieNode root = new TrieNode(null, '\0');
+
+ for(String w : words){
+ root.insert(w.toCharArray(), 0, w.length());
+ }
+
+ final int LEN = board.length * board[0].length;
+
+ for(int x = 0; x < board.length; x++){
+ for(int y = 0; y < board[0].length; y++){
+ if(root.hasChild(board[x][y])){
+ findWords(x, y, board, new boolean[LEN], root.child(board[x][y]));
+ }
+ }
+ }
+
+ return new ArrayList<>(found);
+ }
+}
diff --git a/word-search-ii/index.md b/word-search-ii/index.md
new file mode 100644
index 0000000..2274fed
--- /dev/null
+++ b/word-search-ii/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Word Search II
+date: 2015-05-20 00:32:45+08:00
+leetcode_id: 212
+---
+{% include_relative README.md %}
diff --git a/word-search/index.md b/word-search/index.md
index 9ee737d..753116f 100644
--- a/word-search/index.md
+++ b/word-search/index.md
@@ -4,6 +4,4 @@ title: Word Search
date: 2014-12-29 00:26:24 +0800
leetcode_id: 79
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/zigzag-conversion/index.md b/zigzag-conversion/index.md
index 1778316..20eb8c6 100644
--- a/zigzag-conversion/index.md
+++ b/zigzag-conversion/index.md
@@ -4,6 +4,4 @@ title: ZigZag Conversion
date: 2014-12-29 00:26:24 +0800
leetcode_id: 6
---
-{% assign leetcode_name = {{page.path | remove: '/index.md'}} %}
-{% assign leetcode_readme = {{leetcode_name | append: '/README.md' | prepend: '_root/' }} %}
-{% include {{leetcode_readme}} %}
+{% include_relative README.md %}
diff --git a/zigzag-iterator/README.md b/zigzag-iterator/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/zigzag-iterator/Solution.java b/zigzag-iterator/Solution.java
new file mode 100644
index 0000000..7f04d78
--- /dev/null
+++ b/zigzag-iterator/Solution.java
@@ -0,0 +1,37 @@
+public class ZigzagIterator {
+
+ Iterator[] ivs;
+
+ int p = 0;
+
+ public ZigzagIterator(List v1, List v2) {
+ ivs = new Iterator[]{v1.iterator(), v2.iterator()};
+ }
+
+ public int next() {
+ for(;;){
+
+ Iterator i = ivs[p++ % ivs.length];
+
+ if(i.hasNext()){
+ return i.next();
+ }
+ }
+ }
+
+ public boolean hasNext() {
+ for(Iterator i : ivs){
+ if(i.hasNext()){
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Your ZigzagIterator object will be instantiated and called as such:
+ * ZigzagIterator i = new ZigzagIterator(v1, v2);
+ * while (i.hasNext()) v[f()] = i.next();
+ */
diff --git a/zigzag-iterator/ZigzagIterator.java b/zigzag-iterator/ZigzagIterator.java
new file mode 120000
index 0000000..e570129
--- /dev/null
+++ b/zigzag-iterator/ZigzagIterator.java
@@ -0,0 +1 @@
+Solution.java
\ No newline at end of file
diff --git a/zigzag-iterator/index.md b/zigzag-iterator/index.md
new file mode 100644
index 0000000..acb4140
--- /dev/null
+++ b/zigzag-iterator/index.md
@@ -0,0 +1,7 @@
+---
+layout: solution
+title: Zigzag Iterator
+date: 2015-09-24 17:53:54+08:00
+leetcode_id: 281
+---
+{% include_relative README.md %}
|