From fa7577b999f6f49d58f869f42d8900787f439d7c Mon Sep 17 00:00:00 2001 From: "zhangruihao.zhang" Date: Sun, 26 May 2019 22:16:19 +0800 Subject: [PATCH 1/5] =?UTF-8?q?week=E2=80=94=E2=80=9401?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/id_108/LeetCode_242_108.java | 29 ++++++++++++++ Week_01/id_108/LeetCode_441_108.java | 58 ++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 Week_01/id_108/LeetCode_242_108.java create mode 100644 Week_01/id_108/LeetCode_441_108.java diff --git a/Week_01/id_108/LeetCode_242_108.java b/Week_01/id_108/LeetCode_242_108.java new file mode 100644 index 00000000..af91eb68 --- /dev/null +++ b/Week_01/id_108/LeetCode_242_108.java @@ -0,0 +1,29 @@ +/** + * @author zhangruihao.zhang + * @version v1.0.0 + * @since 2019/05/26 + */ +public class LeetCode_242_108 { + class Solution { + public boolean isAnagram(String s, String t) { + if(s == null || t == null || s.length() != t.length()){ + return false; + } + if(s.equals("") && t.equals("")){ + return true; + } + int[] arr = new int[26]; + for(int i = 0; i 0; ) { + if (m >= k + 1) { + k++; + m = m - k; + } else { + return k; + } + } + return k; + } + + public int arrangeCoins2(int n) { + if (n == 0) { + return 0; + } + return (int)(Math.sqrt(2.0*n+0.25)-0.5); + } + + public int arrangeCoins3(int n) { + if (n == 0) { + return 0; + } + + int low = 1; + int high = n; + int mid; + double tmp; + while (low <= high){ + mid = (high + low)/2; + tmp = (mid * mid + mid) / 2.0; + if(tmp == n){ + return mid; + }else if (tmp < (double) n){ + low = mid + 1 ; + } else { + high = mid - 1; + } + } + + return high; + } +} From 9ee66ab8fecda0f477d0a3a7f599082e6e08e73b Mon Sep 17 00:00:00 2001 From: "zhangruihao.zhang" Date: Tue, 28 May 2019 01:05:26 +0800 Subject: [PATCH 2/5] =?UTF-8?q?x=E7=9A=84n=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/id_108/LeetCode_50_108.java | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Week_01/id_108/LeetCode_50_108.java diff --git a/Week_01/id_108/LeetCode_50_108.java b/Week_01/id_108/LeetCode_50_108.java new file mode 100644 index 00000000..7b519e17 --- /dev/null +++ b/Week_01/id_108/LeetCode_50_108.java @@ -0,0 +1,36 @@ +import org.junit.Test; + +/** + * @author zhangruihao.zhang + * @version v1.0.0 + * @since 2019/05/28 + */ +public class LeetCode_50_108 { + + + public double myPow(double x, int n) { + + if (n == 0) { + return 1; + } + + if (n == 1) { + return x; + } + //对于myPow(2, -2147483648),如果直接取绝对值就会溢出,导致Math.abs(n)还是负数,所以先除2再取绝对值 + double result = myPow(x, n == Integer.MIN_VALUE ? -(n/2) : Math.abs(n) / 2); + + if (n % 2 == 0) { + result = result * result; + } else { + result = result * x * result; + } + + if (n >= 0) { + return result; + } else { + return 1.0 / result; + } + + } +} From cd61e1b1a3333cbdf22cb0f0fca10c194c301817 Mon Sep 17 00:00:00 2001 From: "zhangruihao.zhang" Date: Wed, 29 May 2019 23:24:09 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=9C=B0=E4=B8=8B=E5=9F=8E=E6=B8=B8?= =?UTF-8?q?=E6=88=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Week_01/id_108/LeetCode_174_108.java | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Week_01/id_108/LeetCode_174_108.java diff --git a/Week_01/id_108/LeetCode_174_108.java b/Week_01/id_108/LeetCode_174_108.java new file mode 100644 index 00000000..26f93407 --- /dev/null +++ b/Week_01/id_108/LeetCode_174_108.java @@ -0,0 +1,35 @@ +import org.junit.Test; + +/** + * @author zhangruihao.zhang + * @version v1.0.0 + * @since 2019/05/29 + */ +public class LeetCode_174_108 { + + /** + * 利用动态规划,构造到达某个节点时的最小生命值,最小存活值是1 + * 1、如果是最后一个,到达最后一个点时的存活值就是(1-健康点数,1)的最大值,必须大于等于1,要不就立即死亡 + * 2、如果是最下面一行的点,那么到达它的最小存活着就是=(右边一个点的最小存活值-自己的健康点数,1)的最大值,表示进入我这个点时得具有多少个健康值才能顺利进入下一个点 + * 3、如果是最右边一列,跟上面同理,只不过比较的是下面的点,因为只能往右或往下走 + * 4、如果是中间的某个点,那么肯定找个门槛最低的点走,所以比较下面和右边的点,找到最小值,再跟1比较 + */ + public int calculateMinimumHP(int[][] dungeon) { + int row = dungeon.length - 1; + int column = dungeon[0].length - 1; + for (int i = row; i >= 0; i--) { + for (int j = column; j >= 0; j--) { + if (i == row && j == column) { + dungeon[i][j] = Math.max(1 - dungeon[i][j], 1); + } else if (i == row) { + dungeon[i][j] = Math.max(dungeon[i][j + 1] - dungeon[i][j], 1); + } else if (j == column) { + dungeon[i][j] = Math.max(dungeon[i + 1][j] - dungeon[i][j], 1); + } else { + dungeon[i][j] = Math.max(Math.min(dungeon[i + 1][j], dungeon[i][j + 1]) - dungeon[i][j], 1); + } + } + } + return dungeon[0][0]; + } +} From 00e10000f38ba78881afd21a4ae93934d7069a9d Mon Sep 17 00:00:00 2001 From: "zhangruihao.zhang" Date: Sat, 15 Jun 2019 21:09:36 +0800 Subject: [PATCH 4/5] =?UTF-8?q?n=E7=9A=87=E5=90=8E=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LeetCode/LeetCode_51_108.java | 105 ++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 LeetCode/LeetCode_51_108.java diff --git a/LeetCode/LeetCode_51_108.java b/LeetCode/LeetCode_51_108.java new file mode 100644 index 00000000..bd8c6117 --- /dev/null +++ b/LeetCode/LeetCode_51_108.java @@ -0,0 +1,105 @@ +package com.algorithm; + +import org.junit.Test; + +import java.util.LinkedList; +import java.util.List; + +/** + * @author zhangruihao.zhang + * @version v1.0.0 + * @since 2019/06/15 + */ +public class LeetCode_51_108 { + + //8皇后 + @Test + public void test() { + int num = 8; + int[][] queens = new int[num][num]; + List> result = new LinkedList<>(); + queens(queens, 0, num,result); + System.out.println(result); + } + + private List postQueens(int[][] queens){ + List values = new LinkedList<>(); + for (int i = 0; i < queens.length; i++) { + String row = ""; + for (int j = 0; j < queens[0].length; j++) { + row = row.concat(parse(queens[i][j])); + } + values.add(row); + } + return values; + } + + private String parse(int value){ + return value == 0 ? "." : "Q"; + } + + private void queens(int[][] queens, int i, int num,List> result) { + if (i == num) { + List value = postQueens(queens); + printQueens(value); + result.add(postQueens(queens)); + return; + } + + for (int j = 0; j < queens[0].length; j++) { + if (check(queens, i, j)) { + queens[i][j] = j + 1; + queens(queens, i + 1, num,result); + } + queens[i][j] = 0; + } + } + + private void printQueens(List queens) { + for (int i = 0; i < queens.size(); i++) { + System.out.println(queens.get(i)); + } + System.out.println(); + System.out.println(); + System.out.println(); + System.out.println(); + } + + private boolean check(int[][] queens, int i, int j) { + int length = queens[0].length; + int width = queens.length; + + int i_copy = i - 1; + int j_copy = j - 1; + //检查左上 + while (i_copy >= 0 && j_copy >= 0) { + if (queens[i_copy][j_copy] != 0) { + return false; + } + i_copy--; + j_copy--; + } + //检查右上 + i_copy = i - 1; + j_copy = j + 1; + while (i_copy >= 0 && j_copy <= length - 1) { + if (queens[i_copy][j_copy] != 0) { + return false; + } + i_copy--; + j_copy++; + } + //检查上 + i_copy = i - 1; + j_copy = j; + while (i_copy >= 0) { + if (queens[i_copy][j_copy] != 0) { + return false; + } + i_copy--; + } + + return true; + } + +} From e8509ab32b087d8305cd85e1758d4e3292e1bcf5 Mon Sep 17 00:00:00 2001 From: "zhangruihao.zhang" Date: Sat, 15 Jun 2019 21:12:00 +0800 Subject: [PATCH 5/5] =?UTF-8?q?n=E7=9A=87=E5=90=8E=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LeetCode/{LeetCode_51_108.java => LeetCode_51_N_Queens.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LeetCode/{LeetCode_51_108.java => LeetCode_51_N_Queens.java} (100%) diff --git a/LeetCode/LeetCode_51_108.java b/LeetCode/LeetCode_51_N_Queens.java similarity index 100% rename from LeetCode/LeetCode_51_108.java rename to LeetCode/LeetCode_51_N_Queens.java