cur = mIterators.get(mCurIdx);
-
- if (cur.hasNext()) {
- return true;
- }
- mIterators.remove(mCurIdx);
- }
- return false;
- }
-}
diff --git a/gradle.properties b/gradle.properties
deleted file mode 100644
index aac7c9b..0000000
--- a/gradle.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 13372ae..0000000
Binary files a/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index c7a4e33..0000000
--- a/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Mon Mar 20 10:01:35 CST 2017
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip
diff --git a/gradlew b/gradlew
deleted file mode 100644
index 9d82f78..0000000
--- a/gradlew
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
- echo "$*"
-}
-
-die ( ) {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
-esac
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
deleted file mode 100644
index 8a0b282..0000000
--- a/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/leetcode.iml b/leetcode.iml
deleted file mode 100644
index ce86a2c..0000000
--- a/leetcode.iml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/leetcode/common/common.iml b/leetcode/common/common.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/leetcode/common/common.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/library/src/main/java/com/leetcode/library/CommonUtils.java b/leetcode/common/src/CommonUtils.java
similarity index 77%
rename from library/src/main/java/com/leetcode/library/CommonUtils.java
rename to leetcode/common/src/CommonUtils.java
index f40173c..4e25df5 100644
--- a/library/src/main/java/com/leetcode/library/CommonUtils.java
+++ b/leetcode/common/src/CommonUtils.java
@@ -1,9 +1,3 @@
-package com.leetcode.library;
-
-/**
- * Created by dingjikerbo on 2016/12/12.
- */
-
public class CommonUtils {
diff --git a/library/src/main/java/com/leetcode/library/Interval.java b/leetcode/common/src/Interval.java
similarity index 76%
rename from library/src/main/java/com/leetcode/library/Interval.java
rename to leetcode/common/src/Interval.java
index b1e3dd6..749239e 100644
--- a/library/src/main/java/com/leetcode/library/Interval.java
+++ b/leetcode/common/src/Interval.java
@@ -1,9 +1,3 @@
-package com.leetcode.library;
-
-/**
- * Created by dingjikerbo on 16/11/20.
- */
-
/**
* Definition for an interval.
*/
diff --git a/library/src/main/java/com/leetcode/library/ListNode.java b/leetcode/common/src/ListNode.java
similarity index 83%
rename from library/src/main/java/com/leetcode/library/ListNode.java
rename to leetcode/common/src/ListNode.java
index 7902529..02be290 100644
--- a/library/src/main/java/com/leetcode/library/ListNode.java
+++ b/leetcode/common/src/ListNode.java
@@ -1,9 +1,3 @@
-package com.leetcode.library;
-
-/**
- * Created by dingjikerbo on 2016/11/16.
- */
-
public class ListNode {
public int val;
diff --git a/library/src/main/java/com/leetcode/library/NestedInteger.java b/leetcode/common/src/NestedInteger.java
similarity index 87%
rename from library/src/main/java/com/leetcode/library/NestedInteger.java
rename to leetcode/common/src/NestedInteger.java
index ce8f1d3..39cb29e 100644
--- a/library/src/main/java/com/leetcode/library/NestedInteger.java
+++ b/leetcode/common/src/NestedInteger.java
@@ -1,11 +1,5 @@
-package com.leetcode.library;
-
import java.util.List;
-/**
- * Created by dingjikerbo on 2016/11/22.
- */
-
public interface NestedInteger {
// @return true if this NestedInteger holds a single integer, rather than a nested list.
diff --git a/library/src/main/java/com/leetcode/library/Point.java b/leetcode/common/src/Point.java
similarity index 87%
rename from library/src/main/java/com/leetcode/library/Point.java
rename to leetcode/common/src/Point.java
index aeda913..991a20a 100644
--- a/library/src/main/java/com/leetcode/library/Point.java
+++ b/leetcode/common/src/Point.java
@@ -1,9 +1,3 @@
-package com.leetcode.library;
-
-/**
- * Created by dingjikerbo on 16/12/7.
- */
-
class Point {
int x;
int y;
diff --git a/library/src/main/java/com/leetcode/library/RandomListNode.java b/leetcode/common/src/RandomListNode.java
similarity index 68%
rename from library/src/main/java/com/leetcode/library/RandomListNode.java
rename to leetcode/common/src/RandomListNode.java
index e3eb267..8816baa 100644
--- a/library/src/main/java/com/leetcode/library/RandomListNode.java
+++ b/leetcode/common/src/RandomListNode.java
@@ -1,9 +1,3 @@
-package com.leetcode.library;
-
-/**
- * Created by liwentian on 17/8/9.
- */
-
public class RandomListNode {
public int label;
public RandomListNode next, random;
diff --git a/library/src/main/java/com/leetcode/library/TreeLinkNode.java b/leetcode/common/src/TreeLinkNode.java
similarity index 72%
rename from library/src/main/java/com/leetcode/library/TreeLinkNode.java
rename to leetcode/common/src/TreeLinkNode.java
index d1122b3..0b21dca 100644
--- a/library/src/main/java/com/leetcode/library/TreeLinkNode.java
+++ b/leetcode/common/src/TreeLinkNode.java
@@ -1,9 +1,3 @@
-package com.leetcode.library;
-
-/**
- * Created by dingjikerbo on 16/11/23.
- */
-
/**
* Definition for binary tree with next pointer.
*/
diff --git a/library/src/main/java/com/leetcode/library/TreeNode.java b/leetcode/common/src/TreeNode.java
similarity index 93%
rename from library/src/main/java/com/leetcode/library/TreeNode.java
rename to leetcode/common/src/TreeNode.java
index e028f26..6a1f777 100644
--- a/library/src/main/java/com/leetcode/library/TreeNode.java
+++ b/leetcode/common/src/TreeNode.java
@@ -1,9 +1,3 @@
-package com.leetcode.library;
-
-/**
- * Created by dingjikerbo on 2016/11/16.
- */
-
public class TreeNode {
public int val;
diff --git a/library/src/main/java/com/leetcode/library/TrieNode.java b/leetcode/common/src/TrieNode.java
similarity index 64%
rename from library/src/main/java/com/leetcode/library/TrieNode.java
rename to leetcode/common/src/TrieNode.java
index 5053139..58a80df 100644
--- a/library/src/main/java/com/leetcode/library/TrieNode.java
+++ b/leetcode/common/src/TrieNode.java
@@ -1,9 +1,3 @@
-package com.leetcode.library;
-
-/**
- * Created by dingjikerbo on 2016/11/22.
- */
-
public class TrieNode {
public TrieNode[] nodes;
diff --git a/library/src/main/java/com/leetcode/library/UndirectedGraphNode.java b/leetcode/common/src/UndirectedGraphNode.java
similarity index 78%
rename from library/src/main/java/com/leetcode/library/UndirectedGraphNode.java
rename to leetcode/common/src/UndirectedGraphNode.java
index 068b8c6..5193303 100644
--- a/library/src/main/java/com/leetcode/library/UndirectedGraphNode.java
+++ b/leetcode/common/src/UndirectedGraphNode.java
@@ -1,12 +1,6 @@
-package com.leetcode.library;
-
import java.util.ArrayList;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/12/19.
- */
-
public class UndirectedGraphNode {
public int label;
diff --git a/leetcode/common/src/Utils.java b/leetcode/common/src/Utils.java
new file mode 100644
index 0000000..fdedf69
--- /dev/null
+++ b/leetcode/common/src/Utils.java
@@ -0,0 +1,10 @@
+public class Utils {
+
+ public static int max(int... val) {
+ int max = Integer.MIN_VALUE;
+ for (int k : val) {
+ max = Math.max(max, k);
+ }
+ return max;
+ }
+}
diff --git a/leetcode/leetcode.iml b/leetcode/leetcode.iml
new file mode 100644
index 0000000..da061d4
--- /dev/null
+++ b/leetcode/leetcode.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/leetcode/solution/solution.iml b/leetcode/solution/solution.iml
new file mode 100644
index 0000000..99e828d
--- /dev/null
+++ b/leetcode/solution/solution.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/leetcode/solution/src/AddBinary.java b/leetcode/solution/src/AddBinary.java
new file mode 100644
index 0000000..b755a6c
--- /dev/null
+++ b/leetcode/solution/src/AddBinary.java
@@ -0,0 +1,14 @@
+public class AddBinary {
+
+ public String addBinary(String a, String b) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = a.length() - 1, j = b.length() - 1, flag = 0; i >= 0 || j >= 0 || flag > 0; i--, j--) {
+ int k1 = i >= 0 ? a.charAt(i) - '0' : 0;
+ int k2 = j >= 0 ? b.charAt(j) - '0' : 0;
+ int sum = k1 + k2 + flag;
+ sb.append(sum % 2);
+ flag = sum / 2;
+ }
+ return sb.reverse().toString();
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/AddTwoNumber.java b/leetcode/solution/src/AddTwoNumber.java
similarity index 83%
rename from solution/src/main/java/com/inuker/solution/AddTwoNumber.java
rename to leetcode/solution/src/AddTwoNumber.java
index 42c3576..9469ff4 100644
--- a/solution/src/main/java/com/inuker/solution/AddTwoNumber.java
+++ b/leetcode/solution/src/AddTwoNumber.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-import com.leetcode.library.ListNode;
-
-/**
- * Created by dingjikerbo on 2016/11/17.
- */
-
public class AddTwoNumber {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
diff --git a/solution/src/main/java/com/inuker/solution/AddTwoNumbersII.java b/leetcode/solution/src/AddTwoNumbersII.java
similarity index 87%
rename from solution/src/main/java/com/inuker/solution/AddTwoNumbersII.java
rename to leetcode/solution/src/AddTwoNumbersII.java
index 7331e93..08ca684 100644
--- a/solution/src/main/java/com/inuker/solution/AddTwoNumbersII.java
+++ b/leetcode/solution/src/AddTwoNumbersII.java
@@ -1,13 +1,5 @@
-package com.inuker.solution;
-
-import com.leetcode.library.ListNode;
-
import java.util.Stack;
-/**
- * Created by liwentian on 2017/9/11.
- */
-
public class AddTwoNumbersII {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
diff --git a/solution/src/main/java/com/inuker/solution/AlienDictionary.java b/leetcode/solution/src/AlienDictionary.java
similarity index 93%
rename from solution/src/main/java/com/inuker/solution/AlienDictionary.java
rename to leetcode/solution/src/AlienDictionary.java
index 8c45184..6fd8f05 100644
--- a/solution/src/main/java/com/inuker/solution/AlienDictionary.java
+++ b/leetcode/solution/src/AlienDictionary.java
@@ -1,14 +1,6 @@
-package com.inuker.solution;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.Set;
+import java.util.*;
/**
- * Created by dingjikerbo on 16/12/17.
*
* TestCases
* "z", "z" => "z"
diff --git a/solution/src/main/java/com/inuker/solution/AndroidUnlockPatterns.java b/leetcode/solution/src/AndroidUnlockPatterns.java
similarity index 95%
rename from solution/src/main/java/com/inuker/solution/AndroidUnlockPatterns.java
rename to leetcode/solution/src/AndroidUnlockPatterns.java
index e3790fb..6912537 100644
--- a/solution/src/main/java/com/inuker/solution/AndroidUnlockPatterns.java
+++ b/leetcode/solution/src/AndroidUnlockPatterns.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by liwentian on 2017/9/6.
- */
-
/**
* https://leetcode.com/articles/android-unlock-patterns/
*/
diff --git a/solution/src/main/java/com/inuker/solution/AverageOfLevelsInBinaryTree.java b/leetcode/solution/src/AverageOfLevelsInBinaryTree.java
similarity index 89%
rename from solution/src/main/java/com/inuker/solution/AverageOfLevelsInBinaryTree.java
rename to leetcode/solution/src/AverageOfLevelsInBinaryTree.java
index ff9b246..1324566 100644
--- a/solution/src/main/java/com/inuker/solution/AverageOfLevelsInBinaryTree.java
+++ b/leetcode/solution/src/AverageOfLevelsInBinaryTree.java
@@ -1,15 +1,7 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
-/**
- * Created by dingjikerbo on 2017/7/22.
- */
-
public class AverageOfLevelsInBinaryTree {
public List averageOfLevels(TreeNode root) {
diff --git a/solution/src/main/java/com/inuker/solution/BSTIterator.java b/leetcode/solution/src/BSTIterator.java
similarity index 55%
rename from solution/src/main/java/com/inuker/solution/BSTIterator.java
rename to leetcode/solution/src/BSTIterator.java
index a3dc689..1b6519d 100644
--- a/solution/src/main/java/com/inuker/solution/BSTIterator.java
+++ b/leetcode/solution/src/BSTIterator.java
@@ -1,25 +1,13 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.Stack;
-/**
- * Created by dingjikerbo on 16/11/21.
- */
-
public class BSTIterator {
private Stack mStack;
private TreeNode mCurNode;
public BSTIterator(TreeNode root) {
- mStack = new Stack();
+ mStack = new Stack<>();
mCurNode = root;
-
-// for (mCurNode = root; mCurNode != null; mCurNode = mCurNode.left) {
-// mStack.push(mCurNode);
-// }
}
/**
@@ -49,19 +37,4 @@ public int next() {
return result;
}
-
- /** 这样写也好,不过要注意在构造函数中初始化如上注释部分
- public int next() {
- if (mCurNode == null) {
- mCurNode = mStack.pop();
- }
-
- int val = mCurNode.val;
-
- for (mCurNode = mCurNode.right; mCurNode != null; mCurNode = mCurNode.left) {
- mStack.push(mCurNode);
- }
-
- return val;
- }*/
}
diff --git a/leetcode/solution/src/BackspaceStringCompare.java b/leetcode/solution/src/BackspaceStringCompare.java
new file mode 100644
index 0000000..8d00fe6
--- /dev/null
+++ b/leetcode/solution/src/BackspaceStringCompare.java
@@ -0,0 +1,35 @@
+import java.util.Stack;
+
+public class BackspaceStringCompare {
+
+ public boolean backspaceCompare(String S, String T) {
+ Stack stack1 = new Stack<>();
+ Stack stack2 = new Stack<>();
+ for (int i = 0; i < S.length(); i++) {
+ helper(stack1, S, i);
+ }
+ for (int i = 0; i < T.length(); i++) {
+ helper(stack2, T, i);
+ }
+ while (!stack1.isEmpty() && !stack2.isEmpty()) {
+ if (!stack1.pop().equals(stack2.pop())) {
+ return false;
+ }
+ }
+ return stack1.isEmpty() && stack2.isEmpty();
+ }
+
+ private void helper(Stack stack, String s, int i) {
+ if (i >= s.length()) {
+ return;
+ }
+ char c = s.charAt(i);
+ if (c == '#') {
+ if (!stack.isEmpty()) {
+ stack.pop();
+ }
+ } else {
+ stack.push(c);
+ }
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/BalancedBinaryTree.java b/leetcode/solution/src/BalancedBinaryTree.java
similarity index 85%
rename from solution/src/main/java/com/inuker/solution/BalancedBinaryTree.java
rename to leetcode/solution/src/BalancedBinaryTree.java
index 525fe8a..0e88812 100644
--- a/solution/src/main/java/com/inuker/solution/BalancedBinaryTree.java
+++ b/leetcode/solution/src/BalancedBinaryTree.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/11/28.
- */
-
-import com.leetcode.library.TreeNode;
-
/**
* 平衡二叉树条件是左边是平衡,右边是平衡,且两边高度差相差不超过1
* 树的高度是所有子树的最大高度
diff --git a/solution/src/main/java/com/inuker/solution/BasicCalculator.java b/leetcode/solution/src/BasicCalculator.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/BasicCalculator.java
rename to leetcode/solution/src/BasicCalculator.java
index 51194d3..a246d72 100644
--- a/solution/src/main/java/com/inuker/solution/BasicCalculator.java
+++ b/leetcode/solution/src/BasicCalculator.java
@@ -1,11 +1,5 @@
-package com.inuker.solution;
-
import java.util.Stack;
-/**
- * Created by liwentian on 2017/9/12.
- */
-
public class BasicCalculator {
public int calculate(String s) {
diff --git a/solution/src/main/java/com/inuker/solution/BeautifulArrangement.java b/leetcode/solution/src/BeautifulArrangement.java
similarity index 89%
rename from solution/src/main/java/com/inuker/solution/BeautifulArrangement.java
rename to leetcode/solution/src/BeautifulArrangement.java
index de49e8b..8c7ebb0 100644
--- a/solution/src/main/java/com/inuker/solution/BeautifulArrangement.java
+++ b/leetcode/solution/src/BeautifulArrangement.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by liwentian on 2017/9/6.
- */
-
/**
* https://leetcode.com/articles/beautiful-arrangement/
*/
diff --git a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStock.java b/leetcode/solution/src/BestTimeBuySellStock.java
similarity index 87%
rename from solution/src/main/java/com/inuker/solution/BestTimeBuySellStock.java
rename to leetcode/solution/src/BestTimeBuySellStock.java
index 19fd88f..8661ea7 100644
--- a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStock.java
+++ b/leetcode/solution/src/BestTimeBuySellStock.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/11/17.
- */
-
/**
* https://leetcode.com/articles/best-time-buy-and-sell-stock/
*/
diff --git a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStockII.java b/leetcode/solution/src/BestTimeBuySellStockII.java
similarity index 82%
rename from solution/src/main/java/com/inuker/solution/BestTimeBuySellStockII.java
rename to leetcode/solution/src/BestTimeBuySellStockII.java
index c26588f..4428037 100644
--- a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStockII.java
+++ b/leetcode/solution/src/BestTimeBuySellStockII.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/11/17.
- */
-
/**
* https://leetcode.com/articles/best-time-buy-and-sell-stock-ii/
*/
diff --git a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStockIII.java b/leetcode/solution/src/BestTimeBuySellStockIII.java
similarity index 89%
rename from solution/src/main/java/com/inuker/solution/BestTimeBuySellStockIII.java
rename to leetcode/solution/src/BestTimeBuySellStockIII.java
index 7505fe0..f97d430 100644
--- a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStockIII.java
+++ b/leetcode/solution/src/BestTimeBuySellStockIII.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/11/17.
- */
-
-/**
- */
public class BestTimeBuySellStockIII {
public int maxProfit(int[] prices) {
diff --git a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStockIV.java b/leetcode/solution/src/BestTimeBuySellStockIV.java
similarity index 90%
rename from solution/src/main/java/com/inuker/solution/BestTimeBuySellStockIV.java
rename to leetcode/solution/src/BestTimeBuySellStockIV.java
index 62733db..72e784e 100644
--- a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStockIV.java
+++ b/leetcode/solution/src/BestTimeBuySellStockIV.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/11/17.
- */
-
-/**
- */
public class BestTimeBuySellStockIV {
public int maxProfit(int k, int[] prices) {
diff --git a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStockWithCoolDown.java b/leetcode/solution/src/BestTimeBuySellStockWithCoolDown.java
similarity index 82%
rename from solution/src/main/java/com/inuker/solution/BestTimeBuySellStockWithCoolDown.java
rename to leetcode/solution/src/BestTimeBuySellStockWithCoolDown.java
index ad799c9..e0acc92 100644
--- a/solution/src/main/java/com/inuker/solution/BestTimeBuySellStockWithCoolDown.java
+++ b/leetcode/solution/src/BestTimeBuySellStockWithCoolDown.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/11/17.
- */
-
-/**
- */
public class BestTimeBuySellStockWithCoolDown {
public int maxProfit(int[] prices) {
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreeInorderTraversal.java b/leetcode/solution/src/BinaryTreeInorderTraversal.java
similarity index 93%
rename from solution/src/main/java/com/inuker/solution/BinaryTreeInorderTraversal.java
rename to leetcode/solution/src/BinaryTreeInorderTraversal.java
index 4b65895..f7cc6c1 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreeInorderTraversal.java
+++ b/leetcode/solution/src/BinaryTreeInorderTraversal.java
@@ -1,14 +1,10 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
/**
- * Created by dingjikerbo on 16/12/1.
+ * https://leetcode.com/articles/binary-tree-inorder-traversal/
*/
public class BinaryTreeInorderTraversal {
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreeLevelOrderTraversal.java b/leetcode/solution/src/BinaryTreeLevelOrderTraversal.java
similarity index 90%
rename from solution/src/main/java/com/inuker/solution/BinaryTreeLevelOrderTraversal.java
rename to leetcode/solution/src/BinaryTreeLevelOrderTraversal.java
index 4b8e235..f132a20 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreeLevelOrderTraversal.java
+++ b/leetcode/solution/src/BinaryTreeLevelOrderTraversal.java
@@ -1,15 +1,7 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
-/**
- * Created by dingjikerbo on 2016/11/17.
- */
-
public class BinaryTreeLevelOrderTraversal {
// 耗时2ms
diff --git a/amazon/src/main/java/com/leetcode/amazon/BinaryTreeLevelOrderTraversal.java b/leetcode/solution/src/BinaryTreeLevelOrderTraversalII.java
similarity index 66%
rename from amazon/src/main/java/com/leetcode/amazon/BinaryTreeLevelOrderTraversal.java
rename to leetcode/solution/src/BinaryTreeLevelOrderTraversalII.java
index 470d700..f14eb4c 100644
--- a/amazon/src/main/java/com/leetcode/amazon/BinaryTreeLevelOrderTraversal.java
+++ b/leetcode/solution/src/BinaryTreeLevelOrderTraversalII.java
@@ -1,18 +1,12 @@
-package com.leetcode.amazon;
-
-import com.leetcode.library.TreeNode;
-
+import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
-/**
- * Created by liwentian on 17/8/12.
- */
-
-public class BinaryTreeLevelOrderTraversal {
+public class BinaryTreeLevelOrderTraversalII {
- public List> levelOrder(TreeNode root) {
+ // 耗时2ms,和I一样,只不过加到result时添加到头
+ public List> levelOrderBottom(TreeNode root) {
List> result = new LinkedList<>();
if (root == null) {
@@ -22,36 +16,33 @@ public List> levelOrder(TreeNode root) {
Queue queue = new LinkedList<>();
Queue next = new LinkedList<>();
- queue.add(root);
-
List list = null;
+ queue.offer(root);
+
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (list == null) {
- list = new LinkedList<>();
+ list = new ArrayList<>();
}
list.add(node.val);
if (node.left != null) {
- next.add(node.left);
+ next.offer(node.left);
}
-
if (node.right != null) {
- next.add(node.right);
+ next.offer(node.right);
}
if (queue.isEmpty()) {
- result.add(list);
- list = null;
-
queue.addAll(next);
next.clear();
+ result.add(0, list);
+ list = null;
}
}
-
return result;
}
}
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreeLongestConsecutiveSequence.java b/leetcode/solution/src/BinaryTreeLongestConsecutiveSequence.java
similarity index 86%
rename from solution/src/main/java/com/inuker/solution/BinaryTreeLongestConsecutiveSequence.java
rename to leetcode/solution/src/BinaryTreeLongestConsecutiveSequence.java
index a766b34..611244b 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreeLongestConsecutiveSequence.java
+++ b/leetcode/solution/src/BinaryTreeLongestConsecutiveSequence.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/12/2.
- */
-
-import com.leetcode.library.TreeNode;
-
/**
* https://leetcode.com/articles/binary-tree-longest-consecutive-sequence/
*/
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreeMaximumPathSum.java b/leetcode/solution/src/BinaryTreeMaximumPathSum.java
similarity index 90%
rename from solution/src/main/java/com/inuker/solution/BinaryTreeMaximumPathSum.java
rename to leetcode/solution/src/BinaryTreeMaximumPathSum.java
index e67097c..d7159b2 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreeMaximumPathSum.java
+++ b/leetcode/solution/src/BinaryTreeMaximumPathSum.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/11/28.
- */
-
-import com.leetcode.library.TreeNode;
-
/**
* 单边的或者双边的,或只包含根节点的
*/
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreePaths.java b/leetcode/solution/src/BinaryTreePaths.java
similarity index 85%
rename from solution/src/main/java/com/inuker/solution/BinaryTreePaths.java
rename to leetcode/solution/src/BinaryTreePaths.java
index 1a919b5..a09e484 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreePaths.java
+++ b/leetcode/solution/src/BinaryTreePaths.java
@@ -1,14 +1,6 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/11/20.
- */
-
public class BinaryTreePaths {
// 耗时2ms
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreePostorderTraversal.java b/leetcode/solution/src/BinaryTreePostorderTraversal.java
similarity index 50%
rename from solution/src/main/java/com/inuker/solution/BinaryTreePostorderTraversal.java
rename to leetcode/solution/src/BinaryTreePostorderTraversal.java
index 019889b..fe59430 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreePostorderTraversal.java
+++ b/leetcode/solution/src/BinaryTreePostorderTraversal.java
@@ -1,15 +1,4 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Created by dingjikerbo on 16/12/1.
- */
+import java.util.*;
public class BinaryTreePostorderTraversal {
@@ -33,4 +22,28 @@ public List postorderTraversal(TreeNode root) {
}
return results;
}
+
+ // root为null表示栈顶的左子树都访问完了,该看右子树了
+ public List postorderTraversal2(TreeNode root) {
+ List result = new ArrayList<>();
+ Stack stack = new Stack<>();
+
+ for (TreeNode last = null; !stack.isEmpty() || root != null; ) {
+ if (root != null) {
+ stack.push(root);
+ root = root.left;
+ } else {
+ TreeNode peek = stack.peek();
+ if (peek.right != null && last != peek.right) {
+ root = peek.right; // 只有这里要设置root
+ } else {
+ result.add(peek.val);
+ last = stack.pop();
+ // 此时root仍为null
+ }
+ }
+ }
+
+ return result;
+ }
}
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreePreorderTraversal.java b/leetcode/solution/src/BinaryTreePreorderTraversal.java
similarity index 84%
rename from solution/src/main/java/com/inuker/solution/BinaryTreePreorderTraversal.java
rename to leetcode/solution/src/BinaryTreePreorderTraversal.java
index e88e4be..891c8e3 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreePreorderTraversal.java
+++ b/leetcode/solution/src/BinaryTreePreorderTraversal.java
@@ -1,16 +1,8 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/12/1.
- */
-
public class BinaryTreePreorderTraversal {
public List preorderTraversal(TreeNode root) {
diff --git a/leetcode/solution/src/BinaryTreePruning.java b/leetcode/solution/src/BinaryTreePruning.java
new file mode 100644
index 0000000..4853336
--- /dev/null
+++ b/leetcode/solution/src/BinaryTreePruning.java
@@ -0,0 +1,21 @@
+public class BinaryTreePruning {
+
+ public TreeNode pruneTree(TreeNode root) {
+ return helper(root) ? root : null;
+ }
+
+ private boolean helper(TreeNode root) {
+ if (root == null) {
+ return false;
+ }
+ boolean left = helper(root.left);
+ boolean right = helper(root.right);
+ if (!left) {
+ root.left = null;
+ }
+ if (!right) {
+ root.right = null;
+ }
+ return root.val == 1 || left || right;
+ }
+}
diff --git a/amazon/src/main/java/com/leetcode/amazon/BinaryTreeRightSideView.java b/leetcode/solution/src/BinaryTreeRightSideView.java
similarity index 72%
rename from amazon/src/main/java/com/leetcode/amazon/BinaryTreeRightSideView.java
rename to leetcode/solution/src/BinaryTreeRightSideView.java
index 62ff01d..4a8dcc8 100644
--- a/amazon/src/main/java/com/leetcode/amazon/BinaryTreeRightSideView.java
+++ b/leetcode/solution/src/BinaryTreeRightSideView.java
@@ -1,31 +1,28 @@
-package com.leetcode.amazon;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
-/**
- * Created by liwentian on 17/8/12.
- */
-
public class BinaryTreeRightSideView {
public List rightSideView(TreeNode root) {
- List list = new LinkedList<>();
+ List result = new LinkedList<>();
if (root == null) {
- return list;
+ return result;
}
Queue queue = new LinkedList<>();
Queue next = new LinkedList<>();
- queue.add(root);
+
+ TreeNode last = null;
+
+ queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
+ last = node;
+
if (node.left != null) {
next.offer(node.left);
}
@@ -35,13 +32,12 @@ public List rightSideView(TreeNode root) {
}
if (queue.isEmpty()) {
- list.add(node.val);
-
queue.addAll(next);
next.clear();
+ result.add(last.val);
}
}
- return list;
+ return result;
}
}
diff --git a/leetcode/solution/src/BinaryTreeTilt.java b/leetcode/solution/src/BinaryTreeTilt.java
new file mode 100644
index 0000000..43a56f1
--- /dev/null
+++ b/leetcode/solution/src/BinaryTreeTilt.java
@@ -0,0 +1,23 @@
+public class BinaryTreeTilt {
+
+ int tilt = 0;
+
+ /**
+ * 这题意思是遍历所有结点,对每个节点计算tilt,然后求和
+ * 对于给定root,其tilt为左子树所有节点的和与右子树所有结点的和的差的绝对值
+ */
+ public int findTilt(TreeNode root) {
+ helper(root);
+ return tilt;
+ }
+
+ private int helper(TreeNode root) {
+ if (root == null) {
+ return 0;
+ }
+ int left = helper(root.left);
+ int right = helper(root.right);
+ tilt += Math.abs(left - right);
+ return left + right + root.val;
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreeUpsideDown.java b/leetcode/solution/src/BinaryTreeUpsideDown.java
similarity index 84%
rename from solution/src/main/java/com/inuker/solution/BinaryTreeUpsideDown.java
rename to leetcode/solution/src/BinaryTreeUpsideDown.java
index 6dedc73..808936d 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreeUpsideDown.java
+++ b/leetcode/solution/src/BinaryTreeUpsideDown.java
@@ -1,16 +1,9 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-/**
- * Created by dingjikerbo on 16/12/2.
- */
-
public class BinaryTreeUpsideDown {
/**
* 将root的左子树看作一个整体,root.left就作为倒置后的root和root.right的新parent
* 注意若root的左子树为空,则无法倒置了,什么也不做
+ * 注意最后要给root的左右清零
*/
public TreeNode upsideDownBinaryTree(TreeNode root) {
if(root == null || root.left == null) {
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreeVerticalOrderTraversal.java b/leetcode/solution/src/BinaryTreeVerticalOrderTraversal.java
similarity index 92%
rename from solution/src/main/java/com/inuker/solution/BinaryTreeVerticalOrderTraversal.java
rename to leetcode/solution/src/BinaryTreeVerticalOrderTraversal.java
index 7440106..79365f5 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreeVerticalOrderTraversal.java
+++ b/leetcode/solution/src/BinaryTreeVerticalOrderTraversal.java
@@ -1,16 +1,8 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
-/**
- * Created by dingjikerbo on 2016/11/19.
- */
-
public class BinaryTreeVerticalOrderTraversal {
private int minKey = 0, maxKey = 0;
diff --git a/solution/src/main/java/com/inuker/solution/BinaryTreeZigzagLevelOrderTraversal.java b/leetcode/solution/src/BinaryTreeZigzagLevelOrderTraversal.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/BinaryTreeZigzagLevelOrderTraversal.java
rename to leetcode/solution/src/BinaryTreeZigzagLevelOrderTraversal.java
index 5175477..8641f80 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryTreeZigzagLevelOrderTraversal.java
+++ b/leetcode/solution/src/BinaryTreeZigzagLevelOrderTraversal.java
@@ -1,14 +1,6 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 2016/12/2.
- */
-
public class BinaryTreeZigzagLevelOrderTraversal {
public List> zigzagLevelOrder(TreeNode root) {
diff --git a/solution/src/main/java/com/inuker/solution/BinaryWatch.java b/leetcode/solution/src/BinaryWatch.java
similarity index 92%
rename from solution/src/main/java/com/inuker/solution/BinaryWatch.java
rename to leetcode/solution/src/BinaryWatch.java
index 4c08f08..d23e246 100644
--- a/solution/src/main/java/com/inuker/solution/BinaryWatch.java
+++ b/leetcode/solution/src/BinaryWatch.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.ArrayList;
import java.util.List;
-/**
- * Created by liwentian on 2016/12/29.
- */
-
public class BinaryWatch {
public List readBinaryWatch(int num) {
diff --git a/solution/src/main/java/com/inuker/solution/BombEnemy.java b/leetcode/solution/src/BombEnemy.java
similarity index 93%
rename from solution/src/main/java/com/inuker/solution/BombEnemy.java
rename to leetcode/solution/src/BombEnemy.java
index 2c66aef..0f75d72 100644
--- a/solution/src/main/java/com/inuker/solution/BombEnemy.java
+++ b/leetcode/solution/src/BombEnemy.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/12/11.
- */
-
public class BombEnemy {
public int maxKilledEnemies(char[][] grid) {
diff --git a/solution/src/main/java/com/inuker/solution/BulbSwitcher.java b/leetcode/solution/src/BulbSwitcher.java
similarity index 93%
rename from solution/src/main/java/com/inuker/solution/BulbSwitcher.java
rename to leetcode/solution/src/BulbSwitcher.java
index 499c847..ba9d281 100644
--- a/solution/src/main/java/com/inuker/solution/BulbSwitcher.java
+++ b/leetcode/solution/src/BulbSwitcher.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/12/8.
- */
-
public class BulbSwitcher {
/**
* https://discuss.leetcode.com/topic/39558/share-my-o-1-solution-with-explanation/2
diff --git a/leetcode/solution/src/BullsAndCows.java b/leetcode/solution/src/BullsAndCows.java
new file mode 100644
index 0000000..4e1c7b1
--- /dev/null
+++ b/leetcode/solution/src/BullsAndCows.java
@@ -0,0 +1,44 @@
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+
+public class BullsAndCows {
+
+ public String getHint(String secret, String guess) {
+ HashMap> map1 = new HashMap<>();
+ HashMap> map2 = new HashMap<>();
+ for (int i = 0; i < secret.length(); i++) {
+ Set set = map1.getOrDefault(secret.charAt(i), new HashSet<>());
+ set.add(i);
+ map1.put(secret.charAt(i), set);
+ }
+ for (int i = 0; i < guess.length(); i++) {
+ Set set = map2.getOrDefault(guess.charAt(i), new HashSet<>());
+ set.add(i);
+ map2.put(guess.charAt(i), set);
+ }
+ int bulls = 0, cows = 0;
+ for (Character c : map2.keySet()) {
+ Set set1 = map1.get(c);
+
+ if (set1 == null) {
+ continue;
+ }
+
+ Set set2 = map2.get(c);
+
+ int count = 0;
+
+ for (Integer index : set2) {
+ if (set1.contains(index)) {
+ count++;
+ }
+ }
+
+ bulls += count;
+ cows += Math.min(set1.size(), set2.size()) - count;
+ }
+
+ return String.format("%dA%dB", bulls, cows);
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/BurstBalloons.java b/leetcode/solution/src/BurstBalloons.java
similarity index 95%
rename from solution/src/main/java/com/inuker/solution/BurstBalloons.java
rename to leetcode/solution/src/BurstBalloons.java
index dc1f2e8..c05a99a 100644
--- a/solution/src/main/java/com/inuker/solution/BurstBalloons.java
+++ b/leetcode/solution/src/BurstBalloons.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/12/21.
- */
-
/**
* 这题用的闭区间DP,dp[start][end]表示区间start,end内所有气球爆掉的最大coin
* 假设最后爆第i个气球,start <= i <= end,则对应的coin为
diff --git a/solution/src/main/java/com/inuker/solution/CanArrangeWords.java b/leetcode/solution/src/CanArrangeWords.java
similarity index 92%
rename from solution/src/main/java/com/inuker/solution/CanArrangeWords.java
rename to leetcode/solution/src/CanArrangeWords.java
index f14128c..a48632a 100644
--- a/solution/src/main/java/com/inuker/solution/CanArrangeWords.java
+++ b/leetcode/solution/src/CanArrangeWords.java
@@ -1,11 +1,5 @@
-package com.inuker.solution;
-
import java.util.HashSet;
-/**
- * Created by dingjikerbo on 2017/9/29.
- */
-
/**
* 单词接龙,前一个单词的尾巴和后一个单词的头相同就算接上了
* 如果要返回接龙的结果,可以给HashSet改成List
diff --git a/leetcode/solution/src/Candy.java b/leetcode/solution/src/Candy.java
new file mode 100644
index 0000000..2540129
--- /dev/null
+++ b/leetcode/solution/src/Candy.java
@@ -0,0 +1,50 @@
+import java.util.Arrays;
+
+public class Candy {
+
+ public int candy(int[] ratings) {
+ int[] left = new int[ratings.length];
+ int[] right = new int[ratings.length];
+
+ Arrays.fill(left, 1);
+ Arrays.fill(right, 1);
+
+ for (int i = 1; i < ratings.length; i++) {
+ if (ratings[i] > ratings[i - 1]) {
+ left[i] = left[i - 1] + 1;
+ }
+ }
+ for (int i = ratings.length - 2; i >= 0; i--) {
+ if (ratings[i] > ratings[i + 1]) {
+ right[i] = right[i + 1] + 1;
+ }
+ }
+ int sum = 0;
+ for (int i = 0; i < ratings.length; i++) {
+ sum += Math.max(left[i], right[i]);
+ }
+ return sum;
+ }
+
+ /**
+ * 在上面的基础上优化了一下,去掉了一个数组
+ */
+ public int candy2(int[] ratings) {
+ int[] candys = new int[ratings.length];
+
+ Arrays.fill(candys, 1);
+
+ for (int i = 1; i < ratings.length; i++) {
+ if (ratings[i] > ratings[i - 1]) {
+ candys[i] = candys[i - 1] + 1;
+ }
+ }
+ int sum = candys[ratings.length - 1], prev = 1;
+ for (int i = ratings.length - 2; i >= 0; i--) {
+ int cur = ratings[i] > ratings[i + 1] ? prev + 1 : 1;
+ sum += Math.max(cur, candys[i]);
+ prev = cur;
+ }
+ return sum;
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/CloneGraph.java b/leetcode/solution/src/CloneGraph.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/CloneGraph.java
rename to leetcode/solution/src/CloneGraph.java
index bb03431..087d010 100644
--- a/solution/src/main/java/com/inuker/solution/CloneGraph.java
+++ b/leetcode/solution/src/CloneGraph.java
@@ -1,15 +1,7 @@
-package com.inuker.solution;
-
-import com.leetcode.library.UndirectedGraphNode;
-
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
-/**
- * Created by dingjikerbo on 2016/12/21.
- */
-
public class CloneGraph {
/**
diff --git a/solution/src/main/java/com/inuker/solution/ClosestBinarySearchTreeValue.java b/leetcode/solution/src/ClosestBinarySearchTreeValue.java
similarity index 88%
rename from solution/src/main/java/com/inuker/solution/ClosestBinarySearchTreeValue.java
rename to leetcode/solution/src/ClosestBinarySearchTreeValue.java
index 4335590..3a2adf6 100644
--- a/solution/src/main/java/com/inuker/solution/ClosestBinarySearchTreeValue.java
+++ b/leetcode/solution/src/ClosestBinarySearchTreeValue.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-/**
- * Created by dingjikerbo on 2016/12/2.
- */
-
public class ClosestBinarySearchTreeValue {
public int closestValue(TreeNode root, double target) {
diff --git a/solution/src/main/java/com/inuker/solution/ClosestBinarySearchTreeValueII.java b/leetcode/solution/src/ClosestBinarySearchTreeValueII.java
similarity index 97%
rename from solution/src/main/java/com/inuker/solution/ClosestBinarySearchTreeValueII.java
rename to leetcode/solution/src/ClosestBinarySearchTreeValueII.java
index 2c9c360..41edbf3 100644
--- a/solution/src/main/java/com/inuker/solution/ClosestBinarySearchTreeValueII.java
+++ b/leetcode/solution/src/ClosestBinarySearchTreeValueII.java
@@ -1,16 +1,7 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
-/**
- * Created by dingjikerbo on 2016/12/2.
- */
-
/**
* 有三种解法:
* 2,中序遍历两遍二叉树,不过每次都会中途退出,构成双栈,一个是大于target,一个是小于target,然后依次出栈满k为止,复杂度O(n + k)
diff --git a/solution/src/main/java/com/inuker/solution/Codec.java b/leetcode/solution/src/Codec.java
similarity index 93%
rename from solution/src/main/java/com/inuker/solution/Codec.java
rename to leetcode/solution/src/Codec.java
index d1d7d90..377fdb4 100644
--- a/solution/src/main/java/com/inuker/solution/Codec.java
+++ b/leetcode/solution/src/Codec.java
@@ -1,16 +1,4 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-import java.util.Arrays;
-import java.util.Deque;
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.Stack;
-
-/**
- * Created by dingjikerbo on 2016/11/16.
- */
+import java.util.*;
/**
* 类似题
@@ -62,7 +50,7 @@ private TreeNode helper(Queue queue) {
return root;
}
- /** 下面是非递归版的DFS */
+ /** 下面是非递归版的,前序遍历 */
public String serialize2(TreeNode root) {
StringBuilder sb = new StringBuilder();
if (root == null) {
@@ -86,7 +74,10 @@ public String serialize2(TreeNode root) {
return sb.toString();
}
- // Decodes your encoded data to tree.
+ /**
+ * 前序访问一遍所有结点
+ * 在设置node时,从queue中取出值
+ */
public TreeNode deserialize2(String data) {
String[] texts = data.split(SEP);
Queue queue = new LinkedList(Arrays.asList(texts));
diff --git a/leetcode/solution/src/CoinChange.java b/leetcode/solution/src/CoinChange.java
new file mode 100644
index 0000000..66423ce
--- /dev/null
+++ b/leetcode/solution/src/CoinChange.java
@@ -0,0 +1,20 @@
+import java.util.Arrays;
+
+public class CoinChange {
+
+ public int coinChange(int[] coins, int amount) {
+ Arrays.sort(coins);
+ int[] dp = new int[amount + 1];
+ Arrays.fill(dp, -1);
+ dp[0] = 0;
+ for (int i = 1; i <= amount; i++) {
+ for (int coin: coins) {
+ if (i - coin >= 0 && dp[i - coin] >= 0) {
+ int k = dp[i - coin] + 1;
+ dp[i] = dp[i] > 0 ? Math.min(dp[i], k) : k;
+ }
+ }
+ }
+ return dp[amount];
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/CombinationSum.java b/leetcode/solution/src/CombinationSum.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/CombinationSum.java
rename to leetcode/solution/src/CombinationSum.java
index e5e881d..824a65a 100644
--- a/solution/src/main/java/com/inuker/solution/CombinationSum.java
+++ b/leetcode/solution/src/CombinationSum.java
@@ -1,13 +1,6 @@
-package com.inuker.solution;
-
-import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/11/22.
- */
-
public class CombinationSum {
// 耗时23ms
diff --git a/solution/src/main/java/com/inuker/solution/CombinationSumII.java b/leetcode/solution/src/CombinationSumII.java
similarity index 96%
rename from solution/src/main/java/com/inuker/solution/CombinationSumII.java
rename to leetcode/solution/src/CombinationSumII.java
index eb22a9e..2ab9acd 100644
--- a/solution/src/main/java/com/inuker/solution/CombinationSumII.java
+++ b/leetcode/solution/src/CombinationSumII.java
@@ -1,13 +1,7 @@
-package com.inuker.solution;
-
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/11/22.
- */
-
public class CombinationSumII {
// 耗时29ms
diff --git a/solution/src/main/java/com/inuker/solution/CombinationSumIII.java b/leetcode/solution/src/CombinationSumIII.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/CombinationSumIII.java
rename to leetcode/solution/src/CombinationSumIII.java
index 4e4eccc..c64c203 100644
--- a/solution/src/main/java/com/inuker/solution/CombinationSumIII.java
+++ b/leetcode/solution/src/CombinationSumIII.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/11/22.
- */
-
/**
* 这题不允许重复数字
*/
diff --git a/solution/src/main/java/com/inuker/solution/CombinationSumIV.java b/leetcode/solution/src/CombinationSumIV.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/CombinationSumIV.java
rename to leetcode/solution/src/CombinationSumIV.java
index 8f45652..3920298 100644
--- a/solution/src/main/java/com/inuker/solution/CombinationSumIV.java
+++ b/leetcode/solution/src/CombinationSumIV.java
@@ -1,11 +1,5 @@
-package com.inuker.solution;
-
import java.util.Arrays;
-/**
- * Created by dingjikerbo on 16/11/22.
- */
-
public class CombinationSumIV {
/**
diff --git a/solution/src/main/java/com/inuker/solution/Combinations.java b/leetcode/solution/src/Combinations.java
similarity index 90%
rename from solution/src/main/java/com/inuker/solution/Combinations.java
rename to leetcode/solution/src/Combinations.java
index f2673a0..f4091d3 100644
--- a/solution/src/main/java/com/inuker/solution/Combinations.java
+++ b/leetcode/solution/src/Combinations.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.ArrayList;
import java.util.List;
-/**
- * Created by dingjikerbo on 2016/12/17.
- */
-
public class Combinations {
public List> combine(int n, int k) {
diff --git a/solution/src/main/java/com/inuker/solution/ConstructBinaryTreeFromInorderAndPostorderTraversal.java b/leetcode/solution/src/ConstructBinaryTreeFromInorderAndPostorderTraversal.java
similarity index 89%
rename from solution/src/main/java/com/inuker/solution/ConstructBinaryTreeFromInorderAndPostorderTraversal.java
rename to leetcode/solution/src/ConstructBinaryTreeFromInorderAndPostorderTraversal.java
index f841314..7610466 100644
--- a/solution/src/main/java/com/inuker/solution/ConstructBinaryTreeFromInorderAndPostorderTraversal.java
+++ b/leetcode/solution/src/ConstructBinaryTreeFromInorderAndPostorderTraversal.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-/**
- * Created by dingjikerbo on 2016/12/2.
- */
-
public class ConstructBinaryTreeFromInorderAndPostorderTraversal {
public TreeNode buildTree(int[] inorder, int[] postorder) {
diff --git a/leetcode/solution/src/ConstructBinaryTreeFromPreorderAndPostorderTraversal.java b/leetcode/solution/src/ConstructBinaryTreeFromPreorderAndPostorderTraversal.java
new file mode 100644
index 0000000..93a2492
--- /dev/null
+++ b/leetcode/solution/src/ConstructBinaryTreeFromPreorderAndPostorderTraversal.java
@@ -0,0 +1,29 @@
+import java.util.HashMap;
+
+public class ConstructBinaryTreeFromPreorderAndPostorderTraversal {
+
+ /**
+ * 这里先记录一下post每个数对应的索引,免得每次去找
+ * 不过找找也没关系,因为每个元素不会重复找
+ */
+ public TreeNode constructFromPrePost(int[] pre, int[] post) {
+ HashMap map = new HashMap<>();
+ for (int i = 0; i < post.length; i++) {
+ map.put(post[i], i);
+ }
+ return helper(pre, 0, pre.length - 1, post, 0, post.length - 1, map);
+ }
+
+ private TreeNode helper(int[] pre, int prestart, int preend, int[] post, int poststart, int postend, HashMap map) {
+ if (prestart > preend || poststart > postend) {
+ return null;
+ }
+ TreeNode root = new TreeNode(pre[prestart]);
+ if (prestart + 1 <= preend) {
+ int len = map.get(pre[prestart + 1]) - poststart + 1;
+ root.left = helper(pre, prestart + 1, prestart + len, post, poststart, poststart + len - 1, map);
+ root.right = helper(pre, prestart + len + 1, preend, post, poststart + len, postend - 1, map);
+ }
+ return root;
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/ConstructBinaryTreeFromPreorderInorderTraversal.java b/leetcode/solution/src/ConstructBinaryTreeFromPreorderInorderTraversal.java
similarity index 88%
rename from solution/src/main/java/com/inuker/solution/ConstructBinaryTreeFromPreorderInorderTraversal.java
rename to leetcode/solution/src/ConstructBinaryTreeFromPreorderInorderTraversal.java
index d3fb909..58477f7 100644
--- a/solution/src/main/java/com/inuker/solution/ConstructBinaryTreeFromPreorderInorderTraversal.java
+++ b/leetcode/solution/src/ConstructBinaryTreeFromPreorderInorderTraversal.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-/**
- * Created by dingjikerbo on 16/11/30.
- */
-
public class ConstructBinaryTreeFromPreorderInorderTraversal {
public TreeNode buildTree(int[] preorder, int[] inorder) {
diff --git a/leetcode/solution/src/ConstructStringFromBinaryTree.java b/leetcode/solution/src/ConstructStringFromBinaryTree.java
new file mode 100644
index 0000000..0aed8b5
--- /dev/null
+++ b/leetcode/solution/src/ConstructStringFromBinaryTree.java
@@ -0,0 +1,29 @@
+/**
+ * https://leetcode.com/articles/construct-string-from-binary-tree/
+ */
+
+/**
+ * 这题不难,主要是搞清楚题目意思
+ * 即返回root + (左子树) + (右子树)
+ * 不过要注意几个特殊情况,如果左右子树都为null,则只返回root
+ * 如果左子树为null,右子树非null,则返回root + () + (右子树)
+ * 如果左子树非null,右子树为null,则返回root + (左子树)
+ */
+public class ConstructStringFromBinaryTree {
+
+ /**
+ * 左子树如果为空'()'是不能省略的
+ * 右子树如果为空可以省略
+ */
+ public String tree2str(TreeNode t) {
+ if (t == null) {
+ return "";
+ }
+ if (t.left == null && t.right == null) {
+ return t.val + "";
+ }
+ String left = "(" + tree2str(t.left) + ")";
+ String right = t.right != null ? "(" + tree2str(t.right) + ")" : "";
+ return t.val + left + right;
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/ContainerWithMostWater.java b/leetcode/solution/src/ContainerWithMostWater.java
similarity index 83%
rename from solution/src/main/java/com/inuker/solution/ContainerWithMostWater.java
rename to leetcode/solution/src/ContainerWithMostWater.java
index dce553d..75232b4 100644
--- a/solution/src/main/java/com/inuker/solution/ContainerWithMostWater.java
+++ b/leetcode/solution/src/ContainerWithMostWater.java
@@ -1,14 +1,9 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 17/5/2.
- */
-
/**
* 题目的意思是选定两块板子组成一个桶,使得装水量最大。注意其余的板子都忽略。
* 一种O(n)的方法是对于区间[left, right],假如height[left] < height[right],则我们可以认定[left, right - 1],[left, right - 2] ...
* 都不会比[left, right]装的水更多。原因是木桶的短板没变,所以水平面不会变,但是宽度减小了。
* 所以我们要继续尝试的方向是从较短的一方推进,寄希望于其之后的板子能高一点
+ * 如果两边一样高,那随便推进哪一边都行,因为假如之后还能装更多水,一定不会包含这两边任意一块。如果包含了,水量不会超过当前。
*/
public class ContainerWithMostWater {
diff --git a/solution/src/main/java/com/inuker/solution/ContainsDuplicate.java b/leetcode/solution/src/ContainsDuplicate.java
similarity index 76%
rename from solution/src/main/java/com/inuker/solution/ContainsDuplicate.java
rename to leetcode/solution/src/ContainsDuplicate.java
index c642c0c..3a56afa 100644
--- a/solution/src/main/java/com/inuker/solution/ContainsDuplicate.java
+++ b/leetcode/solution/src/ContainsDuplicate.java
@@ -1,13 +1,5 @@
-package com.inuker.solution;
-
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
-import java.util.TreeSet;
-
-/**
- * Created by dingjikerbo on 16/12/8.
- */
/**
* https://leetcode.com/articles/contains-duplicate/
diff --git a/solution/src/main/java/com/inuker/solution/ContainsDuplicateII.java b/leetcode/solution/src/ContainsDuplicateII.java
similarity index 90%
rename from solution/src/main/java/com/inuker/solution/ContainsDuplicateII.java
rename to leetcode/solution/src/ContainsDuplicateII.java
index a2225ef..0e0ac92 100644
--- a/solution/src/main/java/com/inuker/solution/ContainsDuplicateII.java
+++ b/leetcode/solution/src/ContainsDuplicateII.java
@@ -1,12 +1,5 @@
-package com.inuker.solution;
-
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Created by dingjikerbo on 16/12/8.
- */
/**
* https://leetcode.com/articles/contains-duplicate-ii/
diff --git a/solution/src/main/java/com/inuker/solution/ContainsDuplicateIII.java b/leetcode/solution/src/ContainsDuplicateIII.java
similarity index 89%
rename from solution/src/main/java/com/inuker/solution/ContainsDuplicateIII.java
rename to leetcode/solution/src/ContainsDuplicateIII.java
index e7ca4b8..a4d844c 100644
--- a/solution/src/main/java/com/inuker/solution/ContainsDuplicateIII.java
+++ b/leetcode/solution/src/ContainsDuplicateIII.java
@@ -1,13 +1,7 @@
-package com.inuker.solution;
-
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
-/**
- * Created by dingjikerbo on 16/12/8.
- */
-
/**
* https://leetcode.com/articles/contains-duplicate-iii/
*/
@@ -16,8 +10,7 @@ public class ContainsDuplicateIII {
/**
* 这题要注意溢出问题,干脆都用long
* 时间复杂度O(nlg(min(n,k))
- * for循环走到当前的nums[i]说明之前的都不行,因此只要判断当前
- * nums[i]的加入是否可以即可,因此只要判断nums[i]相邻的上下两个数是否在t范围内
+ * 这里相当于维护了一个window,每次新遍历到一个数,都查看上下相邻的数是否满足条件
*/
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
TreeSet set = new TreeSet<>();
diff --git a/leetcode/solution/src/ConvertBSTToGreaterTree.java b/leetcode/solution/src/ConvertBSTToGreaterTree.java
new file mode 100644
index 0000000..f9fe841
--- /dev/null
+++ b/leetcode/solution/src/ConvertBSTToGreaterTree.java
@@ -0,0 +1,26 @@
+import java.util.Stack;
+
+/**
+ * https://leetcode.com/articles/convert-bst-to-greater-tree/
+ */
+public class ConvertBSTToGreaterTree {
+
+ public TreeNode convertBST(TreeNode root) {
+ Stack stack = new Stack<>();
+ int sum = 0;
+ TreeNode node = root;
+ while (!stack.isEmpty() || node != null) {
+ if (node != null) {
+ stack.push(node);
+ node = node.right;
+ } else {
+ node = stack.pop();
+ int s = sum;
+ sum += node.val;
+ node.val += s;
+ node = node.left;
+ }
+ }
+ return root;
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/ConvertSortedArrayToBinarySearchTree.java b/leetcode/solution/src/ConvertSortedArrayToBinarySearchTree.java
similarity index 82%
rename from solution/src/main/java/com/inuker/solution/ConvertSortedArrayToBinarySearchTree.java
rename to leetcode/solution/src/ConvertSortedArrayToBinarySearchTree.java
index 6e9d784..a81ae81 100644
--- a/solution/src/main/java/com/inuker/solution/ConvertSortedArrayToBinarySearchTree.java
+++ b/leetcode/solution/src/ConvertSortedArrayToBinarySearchTree.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-/**
- * Created by dingjikerbo on 16/11/28.
- */
-
public class ConvertSortedArrayToBinarySearchTree {
public TreeNode sortedArrayToBST(int[] nums) {
diff --git a/solution/src/main/java/com/inuker/solution/ConvertSortedListToBinarySearchTree.java b/leetcode/solution/src/ConvertSortedListToBinarySearchTree.java
similarity index 80%
rename from solution/src/main/java/com/inuker/solution/ConvertSortedListToBinarySearchTree.java
rename to leetcode/solution/src/ConvertSortedListToBinarySearchTree.java
index eea3e9d..6723b13 100644
--- a/solution/src/main/java/com/inuker/solution/ConvertSortedListToBinarySearchTree.java
+++ b/leetcode/solution/src/ConvertSortedListToBinarySearchTree.java
@@ -1,12 +1,3 @@
-package com.inuker.solution;
-
-import com.leetcode.library.ListNode;
-import com.leetcode.library.TreeNode;
-
-/**
- * Created by liwentian on 2017/9/11.
- */
-
public class ConvertSortedListToBinarySearchTree {
public TreeNode sortedListToBST(ListNode head) {
diff --git a/leetcode/solution/src/CopyListWithRandomPointer.java b/leetcode/solution/src/CopyListWithRandomPointer.java
new file mode 100644
index 0000000..19c0f75
--- /dev/null
+++ b/leetcode/solution/src/CopyListWithRandomPointer.java
@@ -0,0 +1,32 @@
+/**
+ * 易错的地方在于random要判空
+ */
+public class CopyListWithRandomPointer {
+
+
+ public RandomListNode copyRandomList(RandomListNode head) {
+ for (RandomListNode p = head; p != null; ) {
+ RandomListNode next = p.next;
+ RandomListNode temp = new RandomListNode(p.label);
+ temp.next = p.next;
+ p.next = temp;
+ p = next;
+ }
+ for (RandomListNode p = head; p != null; ) {
+ if (p.random != null) {
+ p.next.random = p.random.next;
+ }
+ p = p.next.next;
+ }
+ RandomListNode dummy = new RandomListNode(0), cur = dummy;
+ for (RandomListNode p = head; p != null; ) {
+ cur.next = p.next;
+ cur = cur.next;
+ p.next = p.next.next;
+ p = p.next;
+ }
+ return dummy.next;
+ }
+}
+
+
diff --git a/solution/src/main/java/com/inuker/solution/CountAndSay.java b/leetcode/solution/src/CountAndSay.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/CountAndSay.java
rename to leetcode/solution/src/CountAndSay.java
index 2e9c9af..ec3f9b2 100644
--- a/solution/src/main/java/com/inuker/solution/CountAndSay.java
+++ b/leetcode/solution/src/CountAndSay.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/11/22.
- */
-
public class CountAndSay {
public String countAndSay(int n) {
diff --git a/solution/src/main/java/com/inuker/solution/CountCompleteTreeNodes.java b/leetcode/solution/src/CountCompleteTreeNodes.java
similarity index 85%
rename from solution/src/main/java/com/inuker/solution/CountCompleteTreeNodes.java
rename to leetcode/solution/src/CountCompleteTreeNodes.java
index 5650df6..0dfa900 100644
--- a/solution/src/main/java/com/inuker/solution/CountCompleteTreeNodes.java
+++ b/leetcode/solution/src/CountCompleteTreeNodes.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-/**
- * Created by dingjikerbo on 2016/11/29.
- */
-
public class CountCompleteTreeNodes {
/** 适合通用的二叉树,但是对于完全二叉树会超时
@@ -34,7 +26,7 @@ public int countNodes(TreeNode root) {
return count;
}*/
- // 119ms,最差复杂度是O(n),最好是O(lgn)
+ // 119ms,最差复杂度是O((lgn)^2),最好是O(lgn)
public int countNodes(TreeNode root) {
int left = 0, right = 0;
for (TreeNode node = root; node != null; node = node.left, left++);
diff --git a/solution/src/main/java/com/inuker/solution/CountNumberWithUniqueDigits.java b/leetcode/solution/src/CountNumberWithUniqueDigits.java
similarity index 80%
rename from solution/src/main/java/com/inuker/solution/CountNumberWithUniqueDigits.java
rename to leetcode/solution/src/CountNumberWithUniqueDigits.java
index 4fab953..50283e3 100644
--- a/solution/src/main/java/com/inuker/solution/CountNumberWithUniqueDigits.java
+++ b/leetcode/solution/src/CountNumberWithUniqueDigits.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by liwentian on 2016/12/29.
- */
-
public class CountNumberWithUniqueDigits {
public int countNumbersWithUniqueDigits(int n) {
diff --git a/solution/src/main/java/com/inuker/solution/CountOfSmallerNumbersAfterSelf.java b/leetcode/solution/src/CountOfSmallerNumbersAfterSelf.java
similarity index 96%
rename from solution/src/main/java/com/inuker/solution/CountOfSmallerNumbersAfterSelf.java
rename to leetcode/solution/src/CountOfSmallerNumbersAfterSelf.java
index 4fab12b..4aa9c80 100644
--- a/solution/src/main/java/com/inuker/solution/CountOfSmallerNumbersAfterSelf.java
+++ b/leetcode/solution/src/CountOfSmallerNumbersAfterSelf.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.Arrays;
import java.util.List;
-/**
- * Created by dingjikerbo on 2016/12/21.
- */
-
/**
* 这题理解了好久才搞明白
* 建立一棵二叉树,从数组末尾开始遍历,这里每个树的节点要记录sum和dup
diff --git a/solution/src/main/java/com/inuker/solution/CountPrimes.java b/leetcode/solution/src/CountPrimes.java
similarity index 87%
rename from solution/src/main/java/com/inuker/solution/CountPrimes.java
rename to leetcode/solution/src/CountPrimes.java
index d14a019..e0ddfd0 100644
--- a/solution/src/main/java/com/inuker/solution/CountPrimes.java
+++ b/leetcode/solution/src/CountPrimes.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-import java.util.Arrays;
-
-/**
- * Created by dingjikerbo on 16/12/10.
- */
-
/**
* 如果一个数是另一个数的倍数,那这个数肯定不是素数。
* 利用这个性质,我们可以建立一个素数数组,从2开始将素数的倍数都标注为不是素数。
diff --git a/leetcode/solution/src/CountReversePairs.java b/leetcode/solution/src/CountReversePairs.java
new file mode 100644
index 0000000..d3f38a1
--- /dev/null
+++ b/leetcode/solution/src/CountReversePairs.java
@@ -0,0 +1,17 @@
+public class CountReversePairs {
+
+ /**
+ * 数组arr,[0,m)和[m,arr.length)两个区间都是递增的
+ * 如果[0,m)区间的数比[m, arr.len)区间大,则能构成一个reverse pair
+ * 问有多少个reverse pair
+ */
+ int reversePairs(int[] arr, int m) {
+ int pairs = 0;
+ for (int i = m - 1, j = arr.length - 1; j >= m; j--) {
+ for ( ; i >= 0 && arr[i] > arr[j]; i--);
+ pairs += m - 1 - i;
+ }
+ return pairs;
+ }
+}
+
diff --git a/solution/src/main/java/com/inuker/solution/CountUnivalueSubtrees.java b/leetcode/solution/src/CountUnivalueSubtrees.java
similarity index 86%
rename from solution/src/main/java/com/inuker/solution/CountUnivalueSubtrees.java
rename to leetcode/solution/src/CountUnivalueSubtrees.java
index c7933ff..be56ecc 100644
--- a/solution/src/main/java/com/inuker/solution/CountUnivalueSubtrees.java
+++ b/leetcode/solution/src/CountUnivalueSubtrees.java
@@ -1,13 +1,8 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-/**
- * Created by dingjikerbo on 16/12/1.
- */
-
public class CountUnivalueSubtrees {
+ /**
+ * 先分别判断左右子树是不是unival,如果是再判断带上root后是不是unival
+ */
public int countUnivalSubtrees(TreeNode root) {
int[] count = new int[1];
helper(root, count);
diff --git a/solution/src/main/java/com/inuker/solution/CourseSchedule.java b/leetcode/solution/src/CourseSchedule.java
similarity index 81%
rename from solution/src/main/java/com/inuker/solution/CourseSchedule.java
rename to leetcode/solution/src/CourseSchedule.java
index 21bd7da..12a928d 100644
--- a/solution/src/main/java/com/inuker/solution/CourseSchedule.java
+++ b/leetcode/solution/src/CourseSchedule.java
@@ -1,15 +1,4 @@
-package com.inuker.solution;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-import java.util.Set;
-
-/**
- * Created by dingjikerbo on 2016/12/17.
- */
+import java.util.*;
public class CourseSchedule {
diff --git a/solution/src/main/java/com/inuker/solution/CourseScheduleII.java b/leetcode/solution/src/CourseScheduleII.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/CourseScheduleII.java
rename to leetcode/solution/src/CourseScheduleII.java
index 203bc7e..95fc851 100644
--- a/solution/src/main/java/com/inuker/solution/CourseScheduleII.java
+++ b/leetcode/solution/src/CourseScheduleII.java
@@ -1,15 +1,8 @@
-package com.inuker.solution;
-
-import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
-/**
- * Created by dingjikerbo on 2016/12/17.
- */
-
public class CourseScheduleII {
public int[] findOrder(int numCourses, int[][] prerequisites) {
diff --git a/solution/src/main/java/com/inuker/solution/DecodeString.java b/leetcode/solution/src/DecodeString.java
similarity index 95%
rename from solution/src/main/java/com/inuker/solution/DecodeString.java
rename to leetcode/solution/src/DecodeString.java
index a316137..48315d9 100644
--- a/solution/src/main/java/com/inuker/solution/DecodeString.java
+++ b/leetcode/solution/src/DecodeString.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-import java.util.Stack;
-
-/**
- * Created by dingjikerbo on 2016/12/11.
- */
-
public class DecodeString {
/**
diff --git a/leetcode/solution/src/DecodeWays.java b/leetcode/solution/src/DecodeWays.java
new file mode 100644
index 0000000..f204f7f
--- /dev/null
+++ b/leetcode/solution/src/DecodeWays.java
@@ -0,0 +1,24 @@
+/**
+ * TestCases
+ * ""
+ * "1"
+ * "1787897759966261825913315262377298132516969578441236833255596967132573482281598412163216914566534565"
+ * "7893749912342187894921836847319981199844151766195952528631828655978178193192959793156142441128167383"
+ */
+public class DecodeWays {
+
+ // DP,耗时1ms
+ public int numDecodings(String s) {
+ int len = s.length();
+ int[] dp = new int[len];
+ for (int i = 0; i < len; i++) {
+ if (s.charAt(i) != '0') {
+ dp[i] = i > 0 ? dp[i - 1] : 1;
+ }
+ if (i > 0 && (s.charAt(i - 1) == '1' || (s.charAt(i - 1) == '2' && s.charAt(i) <= '6'))) {
+ dp[i] += i > 1 ? dp[i - 2] : 1;
+ }
+ }
+ return dp[len - 1];
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/DeleteNodeInALinkedList.java b/leetcode/solution/src/DeleteNodeInALinkedList.java
similarity index 66%
rename from solution/src/main/java/com/inuker/solution/DeleteNodeInALinkedList.java
rename to leetcode/solution/src/DeleteNodeInALinkedList.java
index 9648546..d7d9aa0 100644
--- a/solution/src/main/java/com/inuker/solution/DeleteNodeInALinkedList.java
+++ b/leetcode/solution/src/DeleteNodeInALinkedList.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by liwentian on 2017/9/11.
- */
-
-import com.leetcode.library.ListNode;
-
/**
* https://leetcode.com/articles/delete-node-linked-list/
*/
diff --git a/solution/src/main/java/com/inuker/solution/DeleteNodeInBST.java b/leetcode/solution/src/DeleteNodeInBST.java
similarity index 86%
rename from solution/src/main/java/com/inuker/solution/DeleteNodeInBST.java
rename to leetcode/solution/src/DeleteNodeInBST.java
index f40bd3a..b33cc58 100644
--- a/solution/src/main/java/com/inuker/solution/DeleteNodeInBST.java
+++ b/leetcode/solution/src/DeleteNodeInBST.java
@@ -1,11 +1,3 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
-/**
- * Created by dingjikerbo on 17/1/2.
- */
-
public class DeleteNodeInBST {
public TreeNode deleteNode(TreeNode root, int key) {
diff --git a/leetcode/solution/src/DiameterOfBinaryTree.java b/leetcode/solution/src/DiameterOfBinaryTree.java
new file mode 100644
index 0000000..3974e27
--- /dev/null
+++ b/leetcode/solution/src/DiameterOfBinaryTree.java
@@ -0,0 +1,31 @@
+public class DiameterOfBinaryTree {
+
+ /**
+ * 这题和 124. Binary Tree Maximum Path Sum比较像
+ */
+ public int diameterOfBinaryTree(TreeNode root) {
+ if (root == null) {
+ return 0;
+ }
+ return dfs(root, new int[1]) - 1;
+ }
+
+ /**
+ * len表示带上root的最大深度
+ */
+ private int dfs(TreeNode root, int[] len) {
+ if (root == null) {
+ return 0;
+ }
+
+ int[] lt = new int[1];
+ int[] rt = new int[1];
+
+ int left = dfs(root.left, lt);
+ int right = dfs(root.right, rt);
+
+ len[0] = Math.max(lt[0], rt[0]) + 1;
+
+ return Math.max(Math.max(left, right), lt[0] + rt[0] + 1);
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/DifferenceWaysToAddParentheses.java b/leetcode/solution/src/DifferenceWaysToAddParentheses.java
similarity index 92%
rename from solution/src/main/java/com/inuker/solution/DifferenceWaysToAddParentheses.java
rename to leetcode/solution/src/DifferenceWaysToAddParentheses.java
index 4ae23c5..a176668 100644
--- a/solution/src/main/java/com/inuker/solution/DifferenceWaysToAddParentheses.java
+++ b/leetcode/solution/src/DifferenceWaysToAddParentheses.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.ArrayList;
import java.util.List;
-/**
- * Created by dingjikerbo on 2016/12/17.
- */
-
public class DifferenceWaysToAddParentheses {
public List diffWaysToCompute(String input) {
diff --git a/solution/src/main/java/com/inuker/solution/DivideTwoIntegers.java b/leetcode/solution/src/DivideTwoIntegers.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/DivideTwoIntegers.java
rename to leetcode/solution/src/DivideTwoIntegers.java
index fa64bc0..855a504 100644
--- a/solution/src/main/java/com/inuker/solution/DivideTwoIntegers.java
+++ b/leetcode/solution/src/DivideTwoIntegers.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 17/1/12.
- */
-
public class DivideTwoIntegers {
/**
diff --git a/solution/src/main/java/com/inuker/solution/EditDistance.java b/leetcode/solution/src/EditDistance.java
similarity index 92%
rename from solution/src/main/java/com/inuker/solution/EditDistance.java
rename to leetcode/solution/src/EditDistance.java
index 6aec8e1..95d8798 100644
--- a/solution/src/main/java/com/inuker/solution/EditDistance.java
+++ b/leetcode/solution/src/EditDistance.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/12/15.
- */
-
/**
* 这题非常重要的是对f的初始化,千万不能漏
* 所有DP问题都要注意初始化边界条件
diff --git a/solution/src/main/java/com/inuker/solution/EncodeAndDecodeStrings.java b/leetcode/solution/src/EncodeAndDecodeStrings.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/EncodeAndDecodeStrings.java
rename to leetcode/solution/src/EncodeAndDecodeStrings.java
index 9b88a71..f5b1bd2 100644
--- a/solution/src/main/java/com/inuker/solution/EncodeAndDecodeStrings.java
+++ b/leetcode/solution/src/EncodeAndDecodeStrings.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 2016/12/11.
- */
-
public class EncodeAndDecodeStrings {
/**
diff --git a/solution/src/main/java/com/inuker/solution/EncodeAndDecodeTinyURL.java b/leetcode/solution/src/EncodeAndDecodeTinyURL.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/EncodeAndDecodeTinyURL.java
rename to leetcode/solution/src/EncodeAndDecodeTinyURL.java
index 64e5d99..386e4fa 100644
--- a/solution/src/main/java/com/inuker/solution/EncodeAndDecodeTinyURL.java
+++ b/leetcode/solution/src/EncodeAndDecodeTinyURL.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.HashMap;
import java.util.Random;
-/**
- * Created by dingjikerbo on 2017/8/20.
- */
-
/**
* https://leetcode.com/articles/encode-and-decode-tinyurl/
*/
diff --git a/leetcode/solution/src/EvaluateDivision.java b/leetcode/solution/src/EvaluateDivision.java
new file mode 100644
index 0000000..674b27b
--- /dev/null
+++ b/leetcode/solution/src/EvaluateDivision.java
@@ -0,0 +1,67 @@
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+/**
+ * 1, 首先给除的结果都存起来,建立有向图
+ * 2,用DFS遍历路径
+ */
+public class EvaluateDivision {
+
+ public double[] calcEquation(String[][] equations, double[] values, String[][] queries) {
+ HashMap> table = new HashMap<>();
+ for (int i = 0; i < equations.length; i++) {
+ add(table, equations[i], values[i]);
+ }
+ double[] result = new double[queries.length];
+ HashSet visited = new HashSet<>();
+ for (int i = 0; i < queries.length; i++) {
+ visited.clear();
+ result[i] = calc(table, visited, queries[i][0], queries[i][1]);
+ }
+ return result;
+ }
+
+ private double calc(HashMap> table, HashSet visited, String a, String b) {
+ HashMap map = table.get(a);
+ if (map == null) {
+ return -1.0;
+ }
+ if (a.equals(b)) {
+ return 1.0;
+ }
+ for (Map.Entry entry : map.entrySet()) {
+ String key = entry.getKey();
+ Double value = entry.getValue();
+
+ if (visited.contains(key)) {
+ continue;
+ }
+
+ visited.add(key);
+
+ double t = calc(table, visited, key, b);
+ if (t != -1.0) {
+ return value * t;
+ }
+
+ visited.remove(key);
+ }
+ return -1.0;
+ }
+
+ private void add(HashMap> table, String[] equation, double value) {
+ HashMap map0 = table.get(equation[0]);
+ HashMap map1 = table.get(equation[1]);
+ if (map0 == null) {
+ map0 = new HashMap<>();
+ table.put(equation[0], map0);
+ }
+ if (map1 == null) {
+ map1 = new HashMap<>();
+ table.put(equation[1], map1);
+ }
+ map0.put(equation[1], value);
+ map1.put(equation[0], 1 / value);
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/EvaluateReversePolishNotation.java b/leetcode/solution/src/EvaluateReversePolishNotation.java
similarity index 90%
rename from solution/src/main/java/com/inuker/solution/EvaluateReversePolishNotation.java
rename to leetcode/solution/src/EvaluateReversePolishNotation.java
index bd85961..0099e69 100644
--- a/solution/src/main/java/com/inuker/solution/EvaluateReversePolishNotation.java
+++ b/leetcode/solution/src/EvaluateReversePolishNotation.java
@@ -1,11 +1,5 @@
-package com.inuker.solution;
-
import java.util.Stack;
-/**
- * Created by liwentian on 2017/9/12.
- */
-
public class EvaluateReversePolishNotation {
public int evalRPN(String[] tokens) {
diff --git a/solution/src/main/java/com/inuker/solution/ExcelSheetColumnNumber.java b/leetcode/solution/src/ExcelSheetColumnNumber.java
similarity index 86%
rename from solution/src/main/java/com/inuker/solution/ExcelSheetColumnNumber.java
rename to leetcode/solution/src/ExcelSheetColumnNumber.java
index 26fb5cd..4d8a79f 100644
--- a/solution/src/main/java/com/inuker/solution/ExcelSheetColumnNumber.java
+++ b/leetcode/solution/src/ExcelSheetColumnNumber.java
@@ -1,14 +1,6 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 2016/12/17.
- */
-
public class ExcelSheetColumnNumber {
public List binaryTreePaths(TreeNode root) {
diff --git a/solution/src/main/java/com/inuker/solution/ExcelSheetColumnTitle.java b/leetcode/solution/src/ExcelSheetColumnTitle.java
similarity index 82%
rename from solution/src/main/java/com/inuker/solution/ExcelSheetColumnTitle.java
rename to leetcode/solution/src/ExcelSheetColumnTitle.java
index a5ea8eb..88fcd30 100644
--- a/solution/src/main/java/com/inuker/solution/ExcelSheetColumnTitle.java
+++ b/leetcode/solution/src/ExcelSheetColumnTitle.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/12/17.
- */
-
public class ExcelSheetColumnTitle {
/**
diff --git a/solution/src/main/java/com/inuker/solution/ExpressionAddOperators.java b/leetcode/solution/src/ExpressionAddOperators.java
similarity index 95%
rename from solution/src/main/java/com/inuker/solution/ExpressionAddOperators.java
rename to leetcode/solution/src/ExpressionAddOperators.java
index 58e79c1..da1008c 100644
--- a/solution/src/main/java/com/inuker/solution/ExpressionAddOperators.java
+++ b/leetcode/solution/src/ExpressionAddOperators.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/11/21.
- */
-
public class ExpressionAddOperators {
/**
diff --git a/solution/src/main/java/com/inuker/solution/FactorCombinations.java b/leetcode/solution/src/FactorCombinations.java
similarity index 90%
rename from solution/src/main/java/com/inuker/solution/FactorCombinations.java
rename to leetcode/solution/src/FactorCombinations.java
index c6ac34c..b16a400 100644
--- a/solution/src/main/java/com/inuker/solution/FactorCombinations.java
+++ b/leetcode/solution/src/FactorCombinations.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by liwentian on 2017/9/6.
- */
-
public class FactorCombinations {
public List> getFactors(int n) {
diff --git a/solution/src/main/java/com/inuker/solution/FactorialTrailingZeroes.java b/leetcode/solution/src/FactorialTrailingZeroes.java
similarity index 69%
rename from solution/src/main/java/com/inuker/solution/FactorialTrailingZeroes.java
rename to leetcode/solution/src/FactorialTrailingZeroes.java
index d0beb44..a816916 100644
--- a/solution/src/main/java/com/inuker/solution/FactorialTrailingZeroes.java
+++ b/leetcode/solution/src/FactorialTrailingZeroes.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/12/7.
- */
-
public class FactorialTrailingZeroes {
public int trailingZeroes(int n) {
diff --git a/solution/src/main/java/com/inuker/solution/FindAllAnagramsInString.java b/leetcode/solution/src/FindAllAnagramsInString.java
similarity index 95%
rename from solution/src/main/java/com/inuker/solution/FindAllAnagramsInString.java
rename to leetcode/solution/src/FindAllAnagramsInString.java
index 63c7aa4..98a9d5b 100644
--- a/solution/src/main/java/com/inuker/solution/FindAllAnagramsInString.java
+++ b/leetcode/solution/src/FindAllAnagramsInString.java
@@ -1,14 +1,7 @@
-package com.inuker.solution;
-
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 2016/11/17.
- */
-
public class FindAllAnagramsInString {
// 耗时16ms,复杂度O(n)
diff --git a/solution/src/main/java/com/inuker/solution/FindAllDuplicatesInAnArray.java b/leetcode/solution/src/FindAllDuplicatesInAnArray.java
similarity index 85%
rename from solution/src/main/java/com/inuker/solution/FindAllDuplicatesInAnArray.java
rename to leetcode/solution/src/FindAllDuplicatesInAnArray.java
index 85961b4..5233bf3 100644
--- a/solution/src/main/java/com/inuker/solution/FindAllDuplicatesInAnArray.java
+++ b/leetcode/solution/src/FindAllDuplicatesInAnArray.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.ArrayList;
import java.util.List;
-/**
- * Created by liwentian on 2017/9/10.
- */
-
public class FindAllDuplicatesInAnArray {
public List findDuplicates(int[] nums) {
diff --git a/solution/src/main/java/com/inuker/solution/FindAllNumbersDisappearedInAnArray.java b/leetcode/solution/src/FindAllNumbersDisappearedInAnArray.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/FindAllNumbersDisappearedInAnArray.java
rename to leetcode/solution/src/FindAllNumbersDisappearedInAnArray.java
index 0269e8d..159043c 100644
--- a/solution/src/main/java/com/inuker/solution/FindAllNumbersDisappearedInAnArray.java
+++ b/leetcode/solution/src/FindAllNumbersDisappearedInAnArray.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.ArrayList;
import java.util.List;
-/**
- * Created by liwentian on 2017/9/10.
- */
-
public class FindAllNumbersDisappearedInAnArray {
//4,3,2,7,8,2,3,1
diff --git a/solution/src/main/java/com/inuker/solution/FindBottomLeftTreeValue.java b/leetcode/solution/src/FindBottomLeftTreeValue.java
similarity index 88%
rename from solution/src/main/java/com/inuker/solution/FindBottomLeftTreeValue.java
rename to leetcode/solution/src/FindBottomLeftTreeValue.java
index dc12267..a177a75 100644
--- a/solution/src/main/java/com/inuker/solution/FindBottomLeftTreeValue.java
+++ b/leetcode/solution/src/FindBottomLeftTreeValue.java
@@ -1,14 +1,6 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.Queue;
-/**
- * Created by liwentian on 17/8/3.
- */
-
public class FindBottomLeftTreeValue {
public int findBottomLeftValue(TreeNode root) {
diff --git a/solution/src/main/java/com/inuker/solution/FindCelebrity.java b/leetcode/solution/src/FindCelebrity.java
similarity index 89%
rename from solution/src/main/java/com/inuker/solution/FindCelebrity.java
rename to leetcode/solution/src/FindCelebrity.java
index 18ebcf7..09e1a45 100644
--- a/solution/src/main/java/com/inuker/solution/FindCelebrity.java
+++ b/leetcode/solution/src/FindCelebrity.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/11/20.
- */
-
/**
* 先用排除法扫一轮,剩下的是唯一的候选人,然后再严格判断
*/
diff --git a/solution/src/main/java/com/inuker/solution/FindDuplicateSubtrees.java b/leetcode/solution/src/FindDuplicateSubtrees.java
similarity index 87%
rename from solution/src/main/java/com/inuker/solution/FindDuplicateSubtrees.java
rename to leetcode/solution/src/FindDuplicateSubtrees.java
index e353480..7036b91 100644
--- a/solution/src/main/java/com/inuker/solution/FindDuplicateSubtrees.java
+++ b/leetcode/solution/src/FindDuplicateSubtrees.java
@@ -1,15 +1,7 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by liwentian on 17/8/3.
- */
-
public class FindDuplicateSubtrees {
/**
diff --git a/solution/src/main/java/com/inuker/solution/FindKPairsWithSmallestSums.java b/leetcode/solution/src/FindKPairsWithSmallestSums.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/FindKPairsWithSmallestSums.java
rename to leetcode/solution/src/FindKPairsWithSmallestSums.java
index dad9523..0513bd1 100644
--- a/solution/src/main/java/com/inuker/solution/FindKPairsWithSmallestSums.java
+++ b/leetcode/solution/src/FindKPairsWithSmallestSums.java
@@ -1,13 +1,7 @@
-package com.inuker.solution;
-
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
-/**
- * Created by liwentian on 2017/9/22.
- */
-
public class FindKPairsWithSmallestSums {
public List kSmallestPairs(int[] nums1, int[] nums2, int k) {
diff --git a/solution/src/main/java/com/inuker/solution/FindLargestValueInEachTreeRow.java b/leetcode/solution/src/FindLargestValueInEachTreeRow.java
similarity index 89%
rename from solution/src/main/java/com/inuker/solution/FindLargestValueInEachTreeRow.java
rename to leetcode/solution/src/FindLargestValueInEachTreeRow.java
index 4fd1361..2c2bd6f 100644
--- a/solution/src/main/java/com/inuker/solution/FindLargestValueInEachTreeRow.java
+++ b/leetcode/solution/src/FindLargestValueInEachTreeRow.java
@@ -1,15 +1,7 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
-/**
- * Created by liwentian on 17/7/25.
- */
-
public class FindLargestValueInEachTreeRow {
public List largestValues(TreeNode root) {
diff --git a/solution/src/main/java/com/inuker/solution/FindLeavesOfBinaryTree.java b/leetcode/solution/src/FindLeavesOfBinaryTree.java
similarity index 85%
rename from solution/src/main/java/com/inuker/solution/FindLeavesOfBinaryTree.java
rename to leetcode/solution/src/FindLeavesOfBinaryTree.java
index b14a9df..d0fc777 100644
--- a/solution/src/main/java/com/inuker/solution/FindLeavesOfBinaryTree.java
+++ b/leetcode/solution/src/FindLeavesOfBinaryTree.java
@@ -1,14 +1,6 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/12/3.
- */
-
public class FindLeavesOfBinaryTree {
public List> findLeaves(TreeNode root) {
diff --git a/solution/src/main/java/com/inuker/solution/FindMedianFromDataStream.java b/leetcode/solution/src/FindMedianFromDataStream.java
similarity index 89%
rename from solution/src/main/java/com/inuker/solution/FindMedianFromDataStream.java
rename to leetcode/solution/src/FindMedianFromDataStream.java
index 75b5ec5..9169ed3 100644
--- a/solution/src/main/java/com/inuker/solution/FindMedianFromDataStream.java
+++ b/leetcode/solution/src/FindMedianFromDataStream.java
@@ -1,13 +1,6 @@
-package com.inuker.solution;
-
-import java.util.Collections;
import java.util.Comparator;
import java.util.PriorityQueue;
-/**
- * Created by dingjikerbo on 17/1/2.
- */
-
public class FindMedianFromDataStream {
/**
diff --git a/solution/src/main/java/com/inuker/solution/FindMinimumInRotatedSortedArray.java b/leetcode/solution/src/FindMinimumInRotatedSortedArray.java
similarity index 65%
rename from solution/src/main/java/com/inuker/solution/FindMinimumInRotatedSortedArray.java
rename to leetcode/solution/src/FindMinimumInRotatedSortedArray.java
index 98145ac..4e452db 100644
--- a/solution/src/main/java/com/inuker/solution/FindMinimumInRotatedSortedArray.java
+++ b/leetcode/solution/src/FindMinimumInRotatedSortedArray.java
@@ -1,11 +1,14 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/12/17.
- */
-
public class FindMinimumInRotatedSortedArray {
+ /**
+ * 由于[left, right]区间内包含了最小值,nums[left]通常是比nums[right]大的
+ * 如果nums[left] mMaxCount) {
- mMaxElemSize = 1;
- mMaxCount = mCurCount;
- }
- } else {
- if (mCurCount == mMaxCount) {
- modes[idx++] = mCurVal;
- }
- }
-
- helper(node.right);
- }
}
diff --git a/solution/src/main/java/com/inuker/solution/FindPeakElement.java b/leetcode/solution/src/FindPeakElement.java
similarity index 92%
rename from solution/src/main/java/com/inuker/solution/FindPeakElement.java
rename to leetcode/solution/src/FindPeakElement.java
index c868529..8b78217 100644
--- a/solution/src/main/java/com/inuker/solution/FindPeakElement.java
+++ b/leetcode/solution/src/FindPeakElement.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by liwentian on 2017/9/10.
- */
-
/**
* https://leetcode.com/articles/find-peak-element/
*/
diff --git a/solution/src/main/java/com/inuker/solution/FindRightInterval.java b/leetcode/solution/src/FindRightInterval.java
similarity index 84%
rename from solution/src/main/java/com/inuker/solution/FindRightInterval.java
rename to leetcode/solution/src/FindRightInterval.java
index 8f2ee9a..bc914df 100644
--- a/solution/src/main/java/com/inuker/solution/FindRightInterval.java
+++ b/leetcode/solution/src/FindRightInterval.java
@@ -1,14 +1,6 @@
-package com.inuker.solution;
-
-import com.leetcode.library.Interval;
-
import java.util.Map;
import java.util.TreeMap;
-/**
- * Created by liwentian on 2017/9/22.
- */
-
public class FindRightInterval {
public int[] findRightInterval(Interval[] intervals) {
diff --git a/leetcode/solution/src/FindTheClosestPalindrome.java b/leetcode/solution/src/FindTheClosestPalindrome.java
new file mode 100644
index 0000000..dc3156f
--- /dev/null
+++ b/leetcode/solution/src/FindTheClosestPalindrome.java
@@ -0,0 +1,28 @@
+public class FindTheClosestPalindrome {
+
+ /**
+ * 此题只给出暴力法
+ * 此种题目太math了,一般不会问
+ */
+ public String nearestPalindromic(String n) {
+ long val = Long.parseLong(n);
+ for (int i = 0; ; i++) {
+ long k1 = val - i, k2 = val + i;
+ if (isPalindrome(k1)) {
+ return String.valueOf(k1);
+ }
+ if (isPalindrome(k2)) {
+ return String.valueOf(k2);
+ }
+ }
+ }
+
+ private boolean isPalindrome(long k) {
+ long x = k, rev = 0;
+ for ( ; k > 0; ) {
+ rev = rev * 10 + k % 10;
+ k /= 10;
+ }
+ return rev == x;
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/FindTheDuplicateNumber.java b/leetcode/solution/src/FindTheDuplicateNumber.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/FindTheDuplicateNumber.java
rename to leetcode/solution/src/FindTheDuplicateNumber.java
index 72ad9e1..d6ac374 100644
--- a/solution/src/main/java/com/inuker/solution/FindTheDuplicateNumber.java
+++ b/leetcode/solution/src/FindTheDuplicateNumber.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/12/17.
- */
-
/**
* 题目的意思是有n+1个数,这些数的范围限定在[1,n],其中只有一个重复数,重复的次数不限
*/
diff --git a/solution/src/main/java/com/inuker/solution/FirstBadVersion.java b/leetcode/solution/src/FirstBadVersion.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/FirstBadVersion.java
rename to leetcode/solution/src/FirstBadVersion.java
index d42389e..aca392a 100644
--- a/solution/src/main/java/com/inuker/solution/FirstBadVersion.java
+++ b/leetcode/solution/src/FirstBadVersion.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 2016/11/19.
- */
-
/**
* https://leetcode.com/articles/first-bad-version/
*/
diff --git a/solution/src/main/java/com/inuker/solution/FirstMissingPositive.java b/leetcode/solution/src/FirstMissingPositive.java
similarity index 82%
rename from solution/src/main/java/com/inuker/solution/FirstMissingPositive.java
rename to leetcode/solution/src/FirstMissingPositive.java
index 4a72ea4..8c04de3 100644
--- a/solution/src/main/java/com/inuker/solution/FirstMissingPositive.java
+++ b/leetcode/solution/src/FirstMissingPositive.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 17/5/11.
- */
-
/**
* 这里要注意的是nums[nums[i] - 1] != nums[i]这个条件,意思是目标坑和当前坑的值不等,此时才能swap
* 倘若换成nums[i] - 1 != i是不行的,这表示目标坑和当前坑不是一个坑就swap,会死循环
@@ -12,7 +6,7 @@ public class FirstMissingPositive {
public int firstMissingPositive(int[] nums) {
for (int i = 0; i < nums.length; i++) {
- while (nums[i] >= 1 && nums[i] <= nums.length && nums[nums[i] - 1] != nums[i]) {
+ while (nums[i] - 1 >= 0 && nums[i] - 1 < nums.length && nums[nums[i] - 1] != nums[i]) {
swap(nums, i, nums[i] - 1);
}
}
diff --git a/amazon/src/main/java/com/leetcode/amazon/FirstUniqueCharacterInAString.java b/leetcode/solution/src/FirstUniqueCharacterInAString.java
similarity index 83%
rename from amazon/src/main/java/com/leetcode/amazon/FirstUniqueCharacterInAString.java
rename to leetcode/solution/src/FirstUniqueCharacterInAString.java
index 206cba8..c0966a8 100644
--- a/amazon/src/main/java/com/leetcode/amazon/FirstUniqueCharacterInAString.java
+++ b/leetcode/solution/src/FirstUniqueCharacterInAString.java
@@ -1,11 +1,6 @@
-package com.leetcode.amazon;
-
-/**
- * Created by liwentian on 17/8/10.
- */
-
public class FirstUniqueCharacterInAString {
+ // 耗时21ms,O(2n)
public int firstUniqChar(String s) {
int[] cnt = new int[26];
for (char c : s.toCharArray()) {
diff --git a/solution/src/main/java/com/inuker/solution/FizzBuzz.java b/leetcode/solution/src/FizzBuzz.java
similarity index 88%
rename from solution/src/main/java/com/inuker/solution/FizzBuzz.java
rename to leetcode/solution/src/FizzBuzz.java
index 34cb0b6..776b9bf 100644
--- a/solution/src/main/java/com/inuker/solution/FizzBuzz.java
+++ b/leetcode/solution/src/FizzBuzz.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/12/7.
- */
-
public class FizzBuzz {
public List fizzBuzz(int n) {
diff --git a/solution/src/main/java/com/inuker/solution/FlattenBinaryTreeToLinkedList.java b/leetcode/solution/src/FlattenBinaryTreeToLinkedList.java
similarity index 72%
rename from solution/src/main/java/com/inuker/solution/FlattenBinaryTreeToLinkedList.java
rename to leetcode/solution/src/FlattenBinaryTreeToLinkedList.java
index 53b2985..60028c4 100644
--- a/solution/src/main/java/com/inuker/solution/FlattenBinaryTreeToLinkedList.java
+++ b/leetcode/solution/src/FlattenBinaryTreeToLinkedList.java
@@ -1,15 +1,7 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
-/**
- * Created by dingjikerbo on 16/11/30.
- */
-
public class FlattenBinaryTreeToLinkedList {
/**
@@ -40,22 +32,25 @@ public void flatten2(TreeNode root) {
helper(root);
}
+ /**
+ * 这题要注意ltail和rtail都为null的情况
+ */
public TreeNode helper(TreeNode root) {
if (root == null) {
- return null;
+ return root;
}
+
+ TreeNode ltail = helper(root.left);
+ TreeNode rtail = helper(root.right);
+
TreeNode right = root.right;
- TreeNode leftTail = null, rightTail = null;
- if (root.left != null) {
- leftTail = helper(root.left);
+ if (ltail != null) {
root.right = root.left;
root.left = null;
- leftTail.right = right;
+ ltail.right = right;
}
- rightTail = helper(right);
-
- return rightTail != null ? rightTail : leftTail;
+ return rtail != null ? rtail : ltail != null ? ltail : root;
}
}
diff --git a/solution/src/main/java/com/inuker/solution/FlattenNestedListIterator.java b/leetcode/solution/src/FlattenNestedListIterator.java
similarity index 87%
rename from solution/src/main/java/com/inuker/solution/FlattenNestedListIterator.java
rename to leetcode/solution/src/FlattenNestedListIterator.java
index 56c4bff..eb7d611 100644
--- a/solution/src/main/java/com/inuker/solution/FlattenNestedListIterator.java
+++ b/leetcode/solution/src/FlattenNestedListIterator.java
@@ -1,15 +1,7 @@
-package com.inuker.solution;
-
-import com.leetcode.library.NestedInteger;
-
import java.util.Iterator;
import java.util.List;
import java.util.Stack;
-/**
- * Created by dingjikerbo on 2016/11/22.
- */
-
public abstract class FlattenNestedListIterator implements Iterator {
private Stack stack;
diff --git a/solution/src/main/java/com/inuker/solution/FlipGame.java b/leetcode/solution/src/FlipGame.java
similarity index 87%
rename from solution/src/main/java/com/inuker/solution/FlipGame.java
rename to leetcode/solution/src/FlipGame.java
index 472b455..030671f 100644
--- a/solution/src/main/java/com/inuker/solution/FlipGame.java
+++ b/leetcode/solution/src/FlipGame.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by liwentian on 2017/9/6.
- */
-
public class FlipGame {
public List generatePossibleNextMoves(String s) {
diff --git a/solution/src/main/java/com/inuker/solution/FlipGameII.java b/leetcode/solution/src/FlipGameII.java
similarity index 78%
rename from solution/src/main/java/com/inuker/solution/FlipGameII.java
rename to leetcode/solution/src/FlipGameII.java
index 97f56a7..29ead0e 100644
--- a/solution/src/main/java/com/inuker/solution/FlipGameII.java
+++ b/leetcode/solution/src/FlipGameII.java
@@ -1,12 +1,3 @@
-package com.inuker.solution;
-
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Created by liwentian on 2017/9/6.
- */
-
public class FlipGameII {
public boolean canWin(String s) {
diff --git a/solution/src/main/java/com/inuker/solution/FourSum.java b/leetcode/solution/src/FourSum.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/FourSum.java
rename to leetcode/solution/src/FourSum.java
index 2225598..0f9f8f4 100644
--- a/solution/src/main/java/com/inuker/solution/FourSum.java
+++ b/leetcode/solution/src/FourSum.java
@@ -1,13 +1,7 @@
-package com.inuker.solution;
-
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 17/5/5.
- */
-
/**
* 本题要注意的一个是溢出,一个是查重
*/
diff --git a/leetcode/solution/src/FriendCircles.java b/leetcode/solution/src/FriendCircles.java
new file mode 100644
index 0000000..56a5144
--- /dev/null
+++ b/leetcode/solution/src/FriendCircles.java
@@ -0,0 +1,69 @@
+public class FriendCircles {
+
+ public int findCircleNum(int[][] M) {
+ int num = 0;
+ for (int i = 0; i < M.length; i++) {
+ if (M[i][i] == 1) {
+ dfs(M, i);
+ num++;
+ }
+ }
+ return num;
+ }
+
+ /**
+ * M[i][i] = 0表示第i个人我们已经访问过了
+ * 访问过的人无需重复访问
+ */
+ private void dfs(int[][] M, int i) {
+ M[i][i] = 0;
+ for (int j = 0; j < M.length; j++) {
+ if (M[j][j] != 0 && M[i][j] == 1) {
+ dfs(M, j);
+ }
+ }
+ }
+
+ public int findCircleNum2(int[][] M) {
+ int n = M.length;
+ UnionFind uf = new UnionFind(n);
+ for (int i = 0; i < n; i++) {
+ for (int j = i + 1; j < n; j++) {
+ if (M[i][j] == 1) {
+ uf.union(i, j);
+ }
+ }
+ }
+ return uf.count();
+ }
+
+ class UnionFind {
+ int[] path;
+ int count;
+
+ public UnionFind(int n) {
+ path = new int[n];
+ count = n;
+ for (int i = 0; i < n; i++) {
+ path[i] = i;
+ }
+ }
+
+ public int find(int i) {
+ while (i != path[i]) i = path[i];
+ return i;
+ }
+
+ public void union(int i, int j) {
+ int rootI = find(i);
+ int rootJ = find(j);
+ if (rootI == rootJ) return;
+ path[rootI] = rootJ;
+ count--;
+ }
+
+ public int count() {
+ return count;
+ }
+ }
+}
diff --git a/leetcode/solution/src/FruitIntoBaskets.java b/leetcode/solution/src/FruitIntoBaskets.java
new file mode 100644
index 0000000..e193da3
--- /dev/null
+++ b/leetcode/solution/src/FruitIntoBaskets.java
@@ -0,0 +1,31 @@
+import java.util.HashMap;
+
+/**
+ * 这题和sliding window较类似
+ * 意思是给定一个数组,找出其中的一个最长的连续子数组,只能有两个不同的数
+ */
+public class FruitIntoBaskets {
+
+
+ public static int totalFruit(int[] tree) {
+ int max = 0;
+ HashMap map = new HashMap<>();
+ for (int i = 0, j = 0; j < tree.length; j++) {
+ int value = tree[j];
+
+ map.put(value, map.getOrDefault(value, 0) + 1);
+
+ for ( ; map.size() > 2; i++) {
+ int val = tree[i], cnt = map.get(val);
+ if (cnt == 1) {
+ map.remove(val);
+ } else {
+ map.put(val, cnt - 1);
+ }
+ }
+ max = Math.max(max, j - i + 1);
+ }
+
+ return max;
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/GameOfLife.java b/leetcode/solution/src/GameOfLife.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/GameOfLife.java
rename to leetcode/solution/src/GameOfLife.java
index ebaca62..3d5744c 100644
--- a/solution/src/main/java/com/inuker/solution/GameOfLife.java
+++ b/leetcode/solution/src/GameOfLife.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by liwentian on 2017/9/10.
- */
-
public class GameOfLife {
public void gameOfLife(int[][] board) {
diff --git a/solution/src/main/java/com/inuker/solution/GeneralizedAbbreviation.java b/leetcode/solution/src/GeneralizedAbbreviation.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/GeneralizedAbbreviation.java
rename to leetcode/solution/src/GeneralizedAbbreviation.java
index ccc62bc..dca0bfb 100644
--- a/solution/src/main/java/com/inuker/solution/GeneralizedAbbreviation.java
+++ b/leetcode/solution/src/GeneralizedAbbreviation.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by liwentian on 2016/12/29.
- */
-
/**
* https://leetcode.com/articles/generalized-abbreviation/
* 思路就是back tracking,对于每个字母,到底是选择留下还是缩写
diff --git a/solution/src/main/java/com/inuker/solution/GenerateParentheses.java b/leetcode/solution/src/GenerateParentheses.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/GenerateParentheses.java
rename to leetcode/solution/src/GenerateParentheses.java
index a40c139..92acd47 100644
--- a/solution/src/main/java/com/inuker/solution/GenerateParentheses.java
+++ b/leetcode/solution/src/GenerateParentheses.java
@@ -1,13 +1,7 @@
-package com.inuker.solution;
-
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 16/12/8.
- */
-
public class GenerateParentheses {
// 耗时4ms
diff --git a/solution/src/main/java/com/inuker/solution/GraphValidTree.java b/leetcode/solution/src/GraphValidTree.java
similarity index 94%
rename from solution/src/main/java/com/inuker/solution/GraphValidTree.java
rename to leetcode/solution/src/GraphValidTree.java
index ab388a9..43912a4 100644
--- a/solution/src/main/java/com/inuker/solution/GraphValidTree.java
+++ b/leetcode/solution/src/GraphValidTree.java
@@ -1,7 +1,4 @@
-package com.inuker.solution;
-
/**
- * Created by dingjikerbo on 17/1/2.
*
* 判断无向图是否带环,可采用UF, DFS, BFS。
* UF实现简单,性能很好
@@ -16,12 +13,7 @@
* 题目中已声明不会有重复的边,类似[0,1]和[1,0]认为是重复的,也不会同时存在
*/
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-import java.util.Set;
+import java.util.*;
/**
* 这题就是给了一堆边,看这些边构成的无向图会不会有环,另外这些边是不是都连在一起的
diff --git a/solution/src/main/java/com/inuker/solution/GrayCode.java b/leetcode/solution/src/GrayCode.java
similarity index 82%
rename from solution/src/main/java/com/inuker/solution/GrayCode.java
rename to leetcode/solution/src/GrayCode.java
index c5a1b6e..8947b74 100644
--- a/solution/src/main/java/com/inuker/solution/GrayCode.java
+++ b/leetcode/solution/src/GrayCode.java
@@ -1,12 +1,6 @@
-package com.inuker.solution;
-
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by dingjikerbo on 2016/12/29.
- */
-
/**
* 关键公式整数n的格雷码为n ^ (n / 2)
*/
diff --git a/amazon/src/main/java/com/leetcode/amazon/GroupAnagrams.java b/leetcode/solution/src/GroupAnagrams.java
similarity index 89%
rename from amazon/src/main/java/com/leetcode/amazon/GroupAnagrams.java
rename to leetcode/solution/src/GroupAnagrams.java
index 7b068c2..f96d3e4 100644
--- a/amazon/src/main/java/com/leetcode/amazon/GroupAnagrams.java
+++ b/leetcode/solution/src/GroupAnagrams.java
@@ -1,16 +1,11 @@
-package com.leetcode.amazon;
-
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
-/**
- * Created by liwentian on 17/8/13.
- */
-
public class GroupAnagrams {
+ // 12ms
public List> groupAnagrams(String[] strs) {
HashMap> map = new HashMap<>();
@@ -31,4 +26,5 @@ public List> groupAnagrams(String[] strs) {
return new LinkedList<>(map.values());
}
+
}
diff --git a/solution/src/main/java/com/inuker/solution/GroupShiftedStrings.java b/leetcode/solution/src/GroupShiftedStrings.java
similarity index 82%
rename from solution/src/main/java/com/inuker/solution/GroupShiftedStrings.java
rename to leetcode/solution/src/GroupShiftedStrings.java
index 3d2877e..00a3249 100644
--- a/solution/src/main/java/com/inuker/solution/GroupShiftedStrings.java
+++ b/leetcode/solution/src/GroupShiftedStrings.java
@@ -1,14 +1,4 @@
-package com.inuker.solution;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created by liwentian on 2017/12/9.
- */
+import java.util.*;
public class GroupShiftedStrings {
/**
diff --git a/solution/src/main/java/com/inuker/solution/GuessNumberHigherOrLower.java b/leetcode/solution/src/GuessNumberHigherOrLower.java
similarity index 88%
rename from solution/src/main/java/com/inuker/solution/GuessNumberHigherOrLower.java
rename to leetcode/solution/src/GuessNumberHigherOrLower.java
index 8902f74..da86cd6 100644
--- a/solution/src/main/java/com/inuker/solution/GuessNumberHigherOrLower.java
+++ b/leetcode/solution/src/GuessNumberHigherOrLower.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/12/10.
- */
-
/**
* 可参考官方文档
* https://leetcode.com/articles/guess-number-higher-or-lower/
diff --git a/solution/src/main/java/com/inuker/solution/GuessNumberHigherOrLowerII.java b/leetcode/solution/src/GuessNumberHigherOrLowerII.java
similarity index 97%
rename from solution/src/main/java/com/inuker/solution/GuessNumberHigherOrLowerII.java
rename to leetcode/solution/src/GuessNumberHigherOrLowerII.java
index 1757aed..7b0275c 100644
--- a/solution/src/main/java/com/inuker/solution/GuessNumberHigherOrLowerII.java
+++ b/leetcode/solution/src/GuessNumberHigherOrLowerII.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/12/10.
- */
-
/**
* 可参考官方文档
* https://leetcode.com/articles/guess-number-higher-or-lower-ii/
diff --git a/leetcode/solution/src/GuessTheWord.java b/leetcode/solution/src/GuessTheWord.java
new file mode 100644
index 0000000..2a413fe
--- /dev/null
+++ b/leetcode/solution/src/GuessTheWord.java
@@ -0,0 +1,41 @@
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+public class GuessTheWord {
+
+ public interface Master {
+ int guess(String word);
+ }
+
+ /**
+ * 这题的意思是有一个word列表,取其中一个作为secret,现在让你来猜哪个是secret,最多猜10次,
+ * 你每猜一个单词,就告诉你这个单词和secret匹配的字母数。
+ * 这里的思路很直接,就是随机取一个单词开始,获得了匹配的字母数后在单词列表中找到可能的候选项
+ * 然后再迭代一次,这样猜10次
+ */
+ public void findSecretWord(String[] wordlist, Master master) {
+ Random random = new Random();
+ for (int i = 0; i < 10; i++) {
+ String word = wordlist[random.nextInt(wordlist.length)];
+ int match = master.guess(word);
+ List list = new ArrayList<>();
+ for (String s : wordlist) {
+ if (match(s, word) == match) {
+ list.add(s);
+ }
+ }
+ wordlist = list.toArray(new String[0]);
+ }
+ }
+
+ private int match(String s, String t) {
+ int match = 0;
+ for (int i = 0; i < s.length(); i++) {
+ if (s.charAt(i) == t.charAt(i)) {
+ match++;
+ }
+ }
+ return match;
+ }
+}
diff --git a/solution/src/main/java/com/inuker/solution/HIndex.java b/leetcode/solution/src/HIndex.java
similarity index 93%
rename from solution/src/main/java/com/inuker/solution/HIndex.java
rename to leetcode/solution/src/HIndex.java
index c519f2d..771e95e 100644
--- a/solution/src/main/java/com/inuker/solution/HIndex.java
+++ b/leetcode/solution/src/HIndex.java
@@ -1,10 +1,5 @@
-package com.inuker.solution;
-
import java.util.Arrays;
-/**
- * Created by dingjikerbo on 16/11/23.
- */
/**
* https://leetcode.com/articles/h-index/
*/
diff --git a/solution/src/main/java/com/inuker/solution/HIndexII.java b/leetcode/solution/src/HIndexII.java
similarity index 90%
rename from solution/src/main/java/com/inuker/solution/HIndexII.java
rename to leetcode/solution/src/HIndexII.java
index 994e1a5..e9c5918 100644
--- a/solution/src/main/java/com/inuker/solution/HIndexII.java
+++ b/leetcode/solution/src/HIndexII.java
@@ -1,8 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/11/23.
- */
public class HIndexII {
diff --git a/solution/src/main/java/com/inuker/solution/HammingDistance.java b/leetcode/solution/src/HammingDistance.java
similarity index 70%
rename from solution/src/main/java/com/inuker/solution/HammingDistance.java
rename to leetcode/solution/src/HammingDistance.java
index 1803ee6..eb2900a 100644
--- a/solution/src/main/java/com/inuker/solution/HammingDistance.java
+++ b/leetcode/solution/src/HammingDistance.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 17/1/7.
- */
-
public class HammingDistance {
public int hammingDistance(int x, int y) {
diff --git a/solution/src/main/java/com/inuker/solution/HouseRobber.java b/leetcode/solution/src/HouseRobber.java
similarity index 91%
rename from solution/src/main/java/com/inuker/solution/HouseRobber.java
rename to leetcode/solution/src/HouseRobber.java
index 58ccaf9..9ae674e 100644
--- a/solution/src/main/java/com/inuker/solution/HouseRobber.java
+++ b/leetcode/solution/src/HouseRobber.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/12/1.
- */
-
public class HouseRobber {
/**
diff --git a/solution/src/main/java/com/inuker/solution/HouseRobberII.java b/leetcode/solution/src/HouseRobberII.java
similarity index 89%
rename from solution/src/main/java/com/inuker/solution/HouseRobberII.java
rename to leetcode/solution/src/HouseRobberII.java
index 479a6e3..0865864 100644
--- a/solution/src/main/java/com/inuker/solution/HouseRobberII.java
+++ b/leetcode/solution/src/HouseRobberII.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/12/10.
- */
-
public class HouseRobberII {
public int rob(int[] nums) {
diff --git a/leetcode/solution/src/HouseRobberIII.java b/leetcode/solution/src/HouseRobberIII.java
new file mode 100644
index 0000000..3a2eb8f
--- /dev/null
+++ b/leetcode/solution/src/HouseRobberIII.java
@@ -0,0 +1,48 @@
+public class HouseRobberIII {
+
+ /**
+ * 效率堪忧,耗时1000ms
+ */
+ public int rob(TreeNode root) {
+ return rob(root, true);
+ }
+
+ /**
+ * @param rob true表示不定,false表示不选root
+ */
+ private int rob(TreeNode root, boolean rob) {
+ if (root == null) {
+ return 0;
+ }
+
+ if (rob) {
+ return Math.max(root.val + rob(root.left, false) + rob(root.right, false),
+ rob(root.left, true) + rob(root.right, true));
+ } else {
+ return rob(root.left, true) + rob(root.right, true);
+ }
+ }
+
+ /**
+ * 优化写法如下,耗时1ms
+ * 这里将两种情况都保存下来并返回给上层,避免了多次重复计算
+ * val[0]表示不rob当前节点,val[1]表示rob当前节点
+ */
+ public int rob2(TreeNode root) {
+ int[] val = helper(root);
+ return Math.max(val[0], val[1]);
+ }
+
+ private int[] helper(TreeNode node) {
+ if (node == null) {
+ return new int[]{0,0};
+ }
+ int[] left = helper(node.left);
+ int[] right = helper(node.right);
+ int[] value = new int[2];
+ value[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);
+ value[1] = node.val + left[0] + right[0];
+ return value;
+ }
+
+}
diff --git a/solution/src/main/java/com/inuker/solution/IncreasingTripletSubsequence.java b/leetcode/solution/src/IncreasingTripletSubsequence.java
similarity index 88%
rename from solution/src/main/java/com/inuker/solution/IncreasingTripletSubsequence.java
rename to leetcode/solution/src/IncreasingTripletSubsequence.java
index f2e6528..8801679 100644
--- a/solution/src/main/java/com/inuker/solution/IncreasingTripletSubsequence.java
+++ b/leetcode/solution/src/IncreasingTripletSubsequence.java
@@ -1,9 +1,3 @@
-package com.inuker.solution;
-
-/**
- * Created by dingjikerbo on 16/11/23.
- */
-
// 是longest increasing subsequence的简化版
public class IncreasingTripletSubsequence {
diff --git a/solution/src/main/java/com/inuker/solution/InorderSuccessorInBST.java b/leetcode/solution/src/InorderSuccessorInBST.java
similarity index 84%
rename from solution/src/main/java/com/inuker/solution/InorderSuccessorInBST.java
rename to leetcode/solution/src/InorderSuccessorInBST.java
index af0cff9..a68bb64 100644
--- a/solution/src/main/java/com/inuker/solution/InorderSuccessorInBST.java
+++ b/leetcode/solution/src/InorderSuccessorInBST.java
@@ -1,15 +1,7 @@
-package com.inuker.solution;
-
-import com.leetcode.library.TreeNode;
-
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
-/**
- * Created by dingjikerbo on 16/11/20.
- */
-
/**
* 有两种方法,用栈做普通的中序遍历,这种没有充分利用BST的特点
* 第二种方法比较巧妙,首先遍历到p,然后继续遍历找到p的右子树的最小值
@@ -37,20 +29,38 @@ public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
return null;
}
+ // 耗时2ms,简单的递归写法,更容易理解
/**
- * p的下一个节点一定是比p大的,所以这里遍历时当p的值小于当前节点,则当前节点
- * 可作为备选,同时往左走。如果在遍历过程中遇到仍然比p大的,说明更接近p,则更新备选。
- *
- * 有两点要注意,
- * 1, 首先res初始要为null,一个节点时,或root为null时,或p为最大节点时,res都没机会赋值
- * 2, 当root迭代到等于p时,走哪个分支呢,为什么选root = root.right,假如root.right为空,则之前的res即可,否则
- * 下一个迭代肯定走到root.val > p.val分支中,更新res。
- */
+ public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
+ if (root == null) {
+ return null;
+ }
+ if (p.val < root.val) {
+ TreeNode node = inorderSuccessor(root.left, p);
+ return node != null ? node : root;
+ } else {
+ return inorderSuccessor(root.right, p);
+ }
+ }
+
+ public TreeNode predecessor(TreeNode root, TreeNode p) {
+ if (root == null)
+ return null;
+
+ if (root.val >= p.val) {
+ return predecessor(root.left, p);
+ } else {
+ TreeNode right = predecessor(root.right, p);
+ return (right != null) ? right : root;
+ }
+ }*/
+
+ // 给上面的递归换成迭代写法
// 耗时4ms
public TreeNode inorderSuccessor2(TreeNode root, TreeNode p) {
TreeNode res = null;
while (root != null) {
- if (root.val > p.val) {
+ if (p.val < root.val) {
res = root;
root = root.left;
} else {
@@ -65,6 +75,8 @@ public TreeNode inorderSuccessor2(TreeNode root, TreeNode p) {
* 给定Node,求其successor,步骤如下:
* 1, 如果Node.right != null,则在Node.right中找最小的那个节点,即从Node.right开始,最左下角的节点
* 2, 如果Node.right == null,则不断往parent走,直到当前节点是其parent的左节点为止,其parent即为给定Node的successor
+ */
+ /*
private TreeNode inOrderSuccessor(TreeNode root, TreeNode node) {
if (node.right != null) {
return minValue(node.right);
diff --git a/leetcode/solution/src/InsertDeleteGetRandom.java b/leetcode/solution/src/InsertDeleteGetRandom.java
new file mode 100644
index 0000000..3be393b
--- /dev/null
+++ b/leetcode/solution/src/InsertDeleteGetRandom.java
@@ -0,0 +1,56 @@
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * 有几点要注意:
+ * remove时要判断删除的是不是最后一个,另外交换了结尾后要更新结尾数的idx
+ */
+// 耗时111ms
+public class InsertDeleteGetRandom {
+
+ ArrayList list;
+ HashMap