From 089faae283bc6c0fdc869d7c1a2d3ceef4dc140c Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Fri, 5 Nov 2021 10:51:47 +0800 Subject: [PATCH 1/4] ValidSudoku --- .../leetcode/middle/ValidSudoku.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/main/java/com/examplehub/leetcode/middle/ValidSudoku.java diff --git a/src/main/java/com/examplehub/leetcode/middle/ValidSudoku.java b/src/main/java/com/examplehub/leetcode/middle/ValidSudoku.java new file mode 100644 index 00000000..e8a46080 --- /dev/null +++ b/src/main/java/com/examplehub/leetcode/middle/ValidSudoku.java @@ -0,0 +1,68 @@ +package com.examplehub.leetcode.middle; + +/** + * https://leetcode.com/problems/valid-sudoku/ + */ +public class ValidSudoku { + public static boolean solution1(char[][] board) { + + //travel all rows to check + for (int i = 0; i < 9; i++) { + int[] digitTable = new int[10]; + for (int j = 0; j < 9; j++) { + if (board[i][j] != '.') { + digitTable[board[i][j] - '0']++; + } + } + if (containsRepeat(digitTable)) { + return false; + } + } + + //travel all columns to check + for (int i = 0; i < 9; i++) { + int[] digitTable = new int[10]; + for (int j = 0; j < 9; j++) { + if (board[j][i] != '.') { + digitTable[board[j][i] - '0']++; + } + } + if (containsRepeat(digitTable)) { + return false; + } + } + + //travel all sub-box + //TODO + return true; + } + + public static boolean containsRepeat(int[] table) { + for (int num : table) { + if (num > 1) { + return true; + } + } + return false; + } + + public static boolean solution2(char[][] board) { + int[][] rows = new int[9][9]; + int[][] cols = new int[9][9]; + int[][][] subBoxes = new int[3][3][9]; + for (int i = 0; i < 9; ++i) { + for (int j = 0; j < 9; ++j) { + if (board[i][j] != '.') { + int index = board[i][j] - '1'; + rows[i][index]++; + cols[j][index]++; + subBoxes[i / 3][j / 3][index]++; + if (rows[i][index] > 1 || cols[j][index] > 1 || subBoxes[i / 3][j / 3][index] > 1) { + return false; + } + } + } + } + return true; + } +} From 30f6307d735f1df71707aa111f8eea303dfe61bc Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Fri, 5 Nov 2021 10:54:43 +0800 Subject: [PATCH 2/4] valid sudoku --- .../leetcode/middle/ValidSudokuTest.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/test/java/com/examplehub/leetcode/middle/ValidSudokuTest.java diff --git a/src/test/java/com/examplehub/leetcode/middle/ValidSudokuTest.java b/src/test/java/com/examplehub/leetcode/middle/ValidSudokuTest.java new file mode 100644 index 00000000..c298cd5f --- /dev/null +++ b/src/test/java/com/examplehub/leetcode/middle/ValidSudokuTest.java @@ -0,0 +1,68 @@ + + +package com.examplehub.leetcode.middle; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ValidSudokuTest { + + @Test + void testSolution1() { + char[][] board = { + {'5', '3', '.', '.', '7', '.', '.', '.', '.'}, + {'6', '.', '.', '1', '9', '5', '.', '.', '.'}, + {'.', '9', '8', '.', '.', '.', '.', '6', '.'}, + {'8', '.', '.', '.', '6', '.', '.', '.', '3'}, + {'4', '.', '.', '8', '.', '3', '.', '.', '1'}, + {'7', '.', '.', '.', '2', '.', '.', '.', '6'}, + {'.', '6', '.', '.', '.', '.', '2', '8', '.'}, + {'.', '.', '.', '4', '1', '9', '.', '.', '5'}, + {'.', '.', '.', '.', '8', '.', '.', '7', '9'}, + }; + assertTrue(ValidSudoku.solution1(board)); + + board = new char[][]{ + {'8', '3', '.', '.', '7', '.', '.', '.', '.'}, + {'6', '.', '.', '1', '9', '5', '.', '.', '.'}, + {'.', '9', '8', '.', '.', '.', '.', '6', '.'}, + {'8', '.', '.', '.', '6', '.', '.', '.', '3'}, + {'4', '.', '.', '8', '.', '3', '.', '.', '1'}, + {'7', '.', '.', '.', '2', '.', '.', '.', '6'}, + {'.', '6', '.', '.', '.', '.', '2', '8', '.'}, + {'.', '.', '.', '4', '1', '9', '.', '.', '5'}, + {'.', '.', '.', '.', '8', '.', '.', '7', '9'}, + }; + assertFalse(ValidSudoku.solution1(board)); + } + + @Test + void testSolution2() { + char[][] board = { + {'5', '3', '.', '.', '7', '.', '.', '.', '.'}, + {'6', '.', '.', '1', '9', '5', '.', '.', '.'}, + {'.', '9', '8', '.', '.', '.', '.', '6', '.'}, + {'8', '.', '.', '.', '6', '.', '.', '.', '3'}, + {'4', '.', '.', '8', '.', '3', '.', '.', '1'}, + {'7', '.', '.', '.', '2', '.', '.', '.', '6'}, + {'.', '6', '.', '.', '.', '.', '2', '8', '.'}, + {'.', '.', '.', '4', '1', '9', '.', '.', '5'}, + {'.', '.', '.', '.', '8', '.', '.', '7', '9'}, + }; + assertTrue(ValidSudoku.solution2(board)); + + board = new char[][]{ + {'8', '3', '.', '.', '7', '.', '.', '.', '.'}, + {'6', '.', '.', '1', '9', '5', '.', '.', '.'}, + {'.', '9', '8', '.', '.', '.', '.', '6', '.'}, + {'8', '.', '.', '.', '6', '.', '.', '.', '3'}, + {'4', '.', '.', '8', '.', '3', '.', '.', '1'}, + {'7', '.', '.', '.', '2', '.', '.', '.', '6'}, + {'.', '6', '.', '.', '.', '.', '2', '8', '.'}, + {'.', '.', '.', '4', '1', '9', '.', '.', '5'}, + {'.', '.', '.', '.', '8', '.', '.', '7', '9'}, + }; + assertFalse(ValidSudoku.solution2(board)); + } +} \ No newline at end of file From f95b8e466b7fe84379ea404c1296e83d9a8cc55b Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Sat, 6 Nov 2021 00:12:55 +0800 Subject: [PATCH 3/4] update autoboxing --- .../basics/number/DoubleExample.java | 4 + .../examplehub/basics/oop/ObjectExample.java | 4 + .../basics/bool/BooleanExampleTest.java | 20 ++++ .../basics/number/DoubleExampleTest.java | 32 +++++ .../basics/number/IntegerExampleTest.java | 50 ++++++++ .../basics/oop/ObjectExampleTest.java | 110 ++++++++++++++++++ 6 files changed, 220 insertions(+) create mode 100644 src/main/java/com/examplehub/basics/number/DoubleExample.java create mode 100644 src/main/java/com/examplehub/basics/oop/ObjectExample.java create mode 100644 src/test/java/com/examplehub/basics/number/DoubleExampleTest.java create mode 100644 src/test/java/com/examplehub/basics/oop/ObjectExampleTest.java diff --git a/src/main/java/com/examplehub/basics/number/DoubleExample.java b/src/main/java/com/examplehub/basics/number/DoubleExample.java new file mode 100644 index 00000000..0e57f841 --- /dev/null +++ b/src/main/java/com/examplehub/basics/number/DoubleExample.java @@ -0,0 +1,4 @@ +package com.examplehub.basics.number; + +public class DoubleExample { +} diff --git a/src/main/java/com/examplehub/basics/oop/ObjectExample.java b/src/main/java/com/examplehub/basics/oop/ObjectExample.java new file mode 100644 index 00000000..ca654f7b --- /dev/null +++ b/src/main/java/com/examplehub/basics/oop/ObjectExample.java @@ -0,0 +1,4 @@ +package com.examplehub.basics.oop; + +public class ObjectExample { +} diff --git a/src/test/java/com/examplehub/basics/bool/BooleanExampleTest.java b/src/test/java/com/examplehub/basics/bool/BooleanExampleTest.java index fde37595..fd29f4da 100644 --- a/src/test/java/com/examplehub/basics/bool/BooleanExampleTest.java +++ b/src/test/java/com/examplehub/basics/bool/BooleanExampleTest.java @@ -48,4 +48,24 @@ void testTernaryOperator() { int abs = num < 0 ? -num : num; assertEquals(3, abs); } + + @Test + void testValueOf() { + Boolean b = Boolean.valueOf(true); + assertTrue(b.booleanValue()); + + b = Boolean.valueOf("false"); + assertFalse(b.booleanValue()); + } + + @Test + void testAutoBoxing() { + Boolean b = false; + System.out.println(b); + assertFalse(b); + + boolean bValue = b; + System.out.println(bValue); + assertFalse(bValue); + } } diff --git a/src/test/java/com/examplehub/basics/number/DoubleExampleTest.java b/src/test/java/com/examplehub/basics/number/DoubleExampleTest.java new file mode 100644 index 00000000..b6850551 --- /dev/null +++ b/src/test/java/com/examplehub/basics/number/DoubleExampleTest.java @@ -0,0 +1,32 @@ +package com.examplehub.basics.number; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class DoubleExampleTest { + @Test + void testValueOf() { + Double d = Double.valueOf(3.14); + System.out.println(d.doubleValue()); + assertEquals(3.14, d.doubleValue()); + + d = Double.valueOf("3.14159"); + System.out.println(d.doubleValue()); + assertEquals(3.14159, d.doubleValue()); + } + + @Test + void testIsNaN() { + Double d = 0.0 / 0; + assertEquals(d, Double.NaN); + } + + @Test + void testAutoboxing() { + Double d = 3.14; + assertEquals(3.14, d.doubleValue()); + double pi = d; + assertEquals(3.14, pi); + } +} \ No newline at end of file diff --git a/src/test/java/com/examplehub/basics/number/IntegerExampleTest.java b/src/test/java/com/examplehub/basics/number/IntegerExampleTest.java index 6f315d42..aa059636 100644 --- a/src/test/java/com/examplehub/basics/number/IntegerExampleTest.java +++ b/src/test/java/com/examplehub/basics/number/IntegerExampleTest.java @@ -2,9 +2,39 @@ import static org.junit.jupiter.api.Assertions.*; +import jdk.jfr.StackTrace; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.function.Executable; class IntegerExampleTest { + + @Test + void testValueOf() { + Integer integer = Integer.valueOf(100); + System.out.println(integer); + assertEquals(100, integer.intValue()); + + integer = Integer.valueOf("123"); + System.out.println(integer); + assertEquals(123, integer.intValue()); + + integer = Integer.valueOf("a", 16); + System.out.println(integer); + assertEquals(10, integer.intValue()); + } + + @Test + void testParseInt() { + int number = Integer.parseInt("123"); + System.out.println(number); + assertEquals(123, number); + + assertThrows(NumberFormatException.class, () -> { + int num = Integer.parseInt("123a"); + fail(); + }); + } + @Test void testAutoBoxing() { Integer integer = 10; @@ -12,6 +42,11 @@ void testAutoBoxing() { Integer integer1 = 10; assertTrue(integer == integer1); assertTrue(integer.equals(integer1)); + + Integer first = 128; + Integer second = 128; + System.out.println(first == second); + assertNotSame(first, second); } @Test @@ -24,4 +59,19 @@ void testAutoBoxingNullPointer() { assertTrue(true); } } + + @Test + void testToBinaryString() { + assertEquals("1010", Integer.toBinaryString(10)); + } + + @Test + void testToOctalString() { + assertEquals("12", Integer.toOctalString(10)); + } + + @Test + void test(){ + assertEquals("a", Integer.toHexString(10)); + } } diff --git a/src/test/java/com/examplehub/basics/oop/ObjectExampleTest.java b/src/test/java/com/examplehub/basics/oop/ObjectExampleTest.java new file mode 100644 index 00000000..75877b1a --- /dev/null +++ b/src/test/java/com/examplehub/basics/oop/ObjectExampleTest.java @@ -0,0 +1,110 @@ +package com.examplehub.basics.oop; + +import org.junit.jupiter.api.Test; + +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.*; + +class ObjectExampleTest { + @Test + void testObject() { + Object o = new Object(); + System.out.println(o); + } + + @Test + void testEquals() { + class Student { + private int id; + private String name; + public Student(int id, String name) { + this.id = id; + this.name = name; + } + } + class People { + private final String name; + private final int age; + + public People(String name, int age) { + this.name = name; + this.age = age; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + People people = (People) o; + return age == people.age && Objects.equals(name, people.name); + } + + @Override + public int hashCode() { + return 0; + } + } + Student stu1 = new Student(10001, "duyuanchao"); + Student stu2 = new Student(10001, "duyuanchao"); + assertNotSame(stu1, stu2); + assertNotEquals(stu1, stu2); + + People p1 = new People("duyuanchao", 25); + People p2 = new People("duyuanchao", 25); + People p3 = new People("jack", 25); + assertNotSame(p1, p2); + assertEquals(p1, p2); + assertNotEquals(p1, p3); + } + + @Test + void testHashCode() { + class People { + private final String name; + private final int age; + + public People(String name, int age) { + this.name = name; + this.age = age; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + People people = (People) o; + return age == people.age && Objects.equals(name, people.name); + } + + @Override + public int hashCode() { + return this.age % 13; + } + } + People p1 = new People("duyuanchao", 25); + People p2 = new People("duyuanchao", 25); + assertEquals(p1.hashCode(), p2.hashCode()); + } + + @Test + void testToString() { + class People { + private final String name; + private final int age; + + public People(String name, int age) { + this.name = name; + this.age = age; + } + + @Override + public String toString() { + return "name = " + name + ", age = " + age; + } + } + + People people = new People("duyuanchao", 25); + assertEquals("name = duyuanchao, age = 25", people.toString()); + } +} \ No newline at end of file From c14c5e18a369fe471bd13fa53c613877e52fa578 Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Sat, 6 Nov 2021 10:54:57 +0800 Subject: [PATCH 4/4] update basics --- .../basics/chars/CharExampleTest.java | 59 +++++++++++++++++++ .../basics/utils/MathUtilsExampleTest.java | 7 +++ 2 files changed, 66 insertions(+) diff --git a/src/test/java/com/examplehub/basics/chars/CharExampleTest.java b/src/test/java/com/examplehub/basics/chars/CharExampleTest.java index 7dcd997f..fc3e0a53 100644 --- a/src/test/java/com/examplehub/basics/chars/CharExampleTest.java +++ b/src/test/java/com/examplehub/basics/chars/CharExampleTest.java @@ -32,4 +32,63 @@ void testAddAndSub() { assertEquals(9, '9' - '0'); assertEquals(0, 'a' - 97); } + + @Test + void testValueOf() { + Character c = Character.valueOf('A'); + assertEquals('A', c.charValue()); + } + + @Test + void testAutoboxing() { + Character c = 'A'; + System.out.println(c); + assertEquals('A', c); + } + + @Test + void testIsLower() { + assertFalse(Character.isLowerCase('A')); + assertTrue(Character.isLowerCase('a')); + assertFalse(Character.isLowerCase('1')); + } + + @Test + void testIsUpper() { + assertTrue(Character.isUpperCase('A')); + assertFalse(Character.isUpperCase('a')); + assertFalse(Character.isUpperCase('1')); + } + + @Test + void testIsDigit() { + System.out.println(Character.isDigit('A')); + System.out.println(Character.isDigit('a')); + System.out.println(Character.isDigit('1')); + + assertFalse(Character.isDigit('A')); + assertFalse(Character.isDigit('a')); + assertTrue(Character.isDigit('1')); + } + + @Test + void testToLower() { + assertEquals('a', Character.toLowerCase('A')); + } + + @Test + void testToUpper() { + assertEquals('A', Character.toUpperCase('a')); + } + + @Test + void testGetNumericValue() { + System.out.println(Character.getNumericValue('8')); + assertEquals(8, Character.getNumericValue('8')); + + System.out.println(Character.getNumericValue('A')); + System.out.println(Character.getNumericValue('a')); + assertEquals(10, Character.getNumericValue('A')); + assertEquals(10, Character.getNumericValue('a')); + } } diff --git a/src/test/java/com/examplehub/basics/utils/MathUtilsExampleTest.java b/src/test/java/com/examplehub/basics/utils/MathUtilsExampleTest.java index 62e2331d..98bd09b8 100644 --- a/src/test/java/com/examplehub/basics/utils/MathUtilsExampleTest.java +++ b/src/test/java/com/examplehub/basics/utils/MathUtilsExampleTest.java @@ -51,4 +51,11 @@ void testRandom() { double randomNumber = Math.random(); assertTrue(randomNumber >= 0 && randomNumber < 1); } + + @Test + void testRound() { + assertEquals(3, Math.round(3.14)); + assertEquals(4, Math.round(3.78)); + assertEquals(-3, Math.round(-3.14)); + } }