@@ -21,70 +21,74 @@ A valid square has four equal sides with positive length and four equal angles (
21
21
22
22
*/
23
23
public class _593 {
24
- /**Note: I don't need to use backtracking to find all permutations, this is an overkill.
25
- * This is the most easy one: https://leetcode.com/articles/kill-process-2/#approach-3-checking-every-case-accepted*/
24
+ public static class Solution1 {
25
+ /**
26
+ * Note: I don't need to use backtracking to find all permutations, this is an overkill.
27
+ * This is the most easy one: https://leetcode.com/articles/kill-process-2/#approach-3-checking-every-case-accepted
28
+ */
26
29
27
- public boolean validSquare (int [] p1 , int [] p2 , int [] p3 , int [] p4 ) {
28
- List <int []> input = new ArrayList <>(Arrays .asList (p1 , p2 , p3 , p4 ));
29
- List <List <int []>> allPermuations = getAllPermutations (input );
30
- for (List <int []> eachPermutation : allPermuations ) {
31
- if (isValid (eachPermutation )) {
32
- return true ;
30
+ public boolean validSquare (int [] p1 , int [] p2 , int [] p3 , int [] p4 ) {
31
+ List <int []> input = new ArrayList <>(Arrays .asList (p1 , p2 , p3 , p4 ));
32
+ List <List <int []>> allPermuations = getAllPermutations (input );
33
+ for (List <int []> eachPermutation : allPermuations ) {
34
+ if (isValid (eachPermutation )) {
35
+ return true ;
36
+ }
33
37
}
38
+ return false ;
34
39
}
35
- return false ;
36
- }
37
-
38
- private List <List <int []>> getAllPermutations (List <int []> input ) {
39
- List <List <int []>> result = new ArrayList ();
40
- List <int []> init = new ArrayList <>();
41
- result .add (init );
42
- return backTracking (result , input , 0 );
43
- }
44
40
45
- private List <List <int []>> backTracking (List <List <int []>> result , List <int []> input , int pos ) {
46
- if (pos == input .size ()) {
47
- return result ;
41
+ private List <List <int []>> getAllPermutations (List <int []> input ) {
42
+ List <List <int []>> result = new ArrayList ();
43
+ List <int []> init = new ArrayList <>();
44
+ result .add (init );
45
+ return backTracking (result , input , 0 );
48
46
}
49
- List <List <int []>> newResult = new ArrayList <>();
50
- for (List <int []> eachList : result ) {
51
- for (int i = 0 ; i <= eachList .size (); i ++) {
52
- List <int []> newList = new ArrayList <>(eachList );
53
- newList .add (i , input .get (pos ));
54
- newResult .add (newList );
47
+
48
+ private List <List <int []>> backTracking (List <List <int []>> result , List <int []> input , int pos ) {
49
+ if (pos == input .size ()) {
50
+ return result ;
51
+ }
52
+ List <List <int []>> newResult = new ArrayList <>();
53
+ for (List <int []> eachList : result ) {
54
+ for (int i = 0 ; i <= eachList .size (); i ++) {
55
+ List <int []> newList = new ArrayList <>(eachList );
56
+ newList .add (i , input .get (pos ));
57
+ newResult .add (newList );
58
+ }
55
59
}
60
+ result = newResult ;
61
+ return backTracking (result , input , pos + 1 );
56
62
}
57
- result = newResult ;
58
- return backTracking (result , input , pos + 1 );
59
- }
60
63
61
- private boolean isValid (List <int []> points ) {
62
- int [] p1 = points .get (0 );
63
- int [] p2 = points .get (1 );
64
- int [] p3 = points .get (2 );
65
- int [] p4 = points .get (3 );
66
- double distance = (Math .pow (p1 [0 ] - p2 [0 ], 2 ) + Math .pow (p1 [1 ] - p2 [1 ], 2 ));
67
- return distance == (Math .pow (p2 [0 ] - p3 [0 ], 2 ) + Math .pow (p2 [1 ] - p3 [1 ], 2 ))
68
- && distance == (Math .pow (p3 [0 ] - p4 [0 ], 2 ) + Math .pow (p3 [1 ] - p4 [1 ], 2 ))
69
- && distance == (Math .pow (p4 [0 ] - p1 [0 ], 2 ) + Math .pow (p4 [1 ] - p1 [1 ], 2 ))
70
- && isRightAngle (p1 , p2 , p3 )
71
- && noDuplicate (p1 , p2 , p3 , p4 );
72
- }
64
+ private boolean isValid (List <int []> points ) {
65
+ int [] p1 = points .get (0 );
66
+ int [] p2 = points .get (1 );
67
+ int [] p3 = points .get (2 );
68
+ int [] p4 = points .get (3 );
69
+ double distance = (Math .pow (p1 [0 ] - p2 [0 ], 2 ) + Math .pow (p1 [1 ] - p2 [1 ], 2 ));
70
+ return distance == (Math .pow (p2 [0 ] - p3 [0 ], 2 ) + Math .pow (p2 [1 ] - p3 [1 ], 2 ))
71
+ && distance == (Math .pow (p3 [0 ] - p4 [0 ], 2 ) + Math .pow (p3 [1 ] - p4 [1 ], 2 ))
72
+ && distance == (Math .pow (p4 [0 ] - p1 [0 ], 2 ) + Math .pow (p4 [1 ] - p1 [1 ], 2 ))
73
+ && isRightAngle (p1 , p2 , p3 )
74
+ && noDuplicate (p1 , p2 , p3 , p4 );
75
+ }
73
76
74
- public boolean noDuplicate (int [] p1 , int [] p2 , int [] p3 , int [] p4 ) {
75
- return !Arrays .equals (p1 , p2 )
76
- && !Arrays .equals (p1 , p3 )
77
- && !Arrays .equals (p1 , p4 )
78
- && !Arrays .equals (p2 , p3 )
79
- && !Arrays .equals (p2 , p4 )
80
- && !Arrays .equals (p3 , p4 );
81
- }
77
+ public boolean noDuplicate (int [] p1 , int [] p2 , int [] p3 , int [] p4 ) {
78
+ return !Arrays .equals (p1 , p2 )
79
+ && !Arrays .equals (p1 , p3 )
80
+ && !Arrays .equals (p1 , p4 )
81
+ && !Arrays .equals (p2 , p3 )
82
+ && !Arrays .equals (p2 , p4 )
83
+ && !Arrays .equals (p3 , p4 );
84
+ }
82
85
83
- public boolean isRightAngle (int [] p1 , int [] p2 , int [] p3 ) {
84
- double angle1 = Math .atan2 (p2 [1 ] - p1 [1 ], p2 [0 ] - p1 [0 ]);
85
- double angle2 = Math .atan2 (p3 [1 ] - p1 [1 ], p3 [0 ] - p1 [0 ]);
86
- double degree = Math .toDegrees (angle1 - angle2 );
87
- return degree % 45 == 0 ;
86
+ public boolean isRightAngle (int [] p1 , int [] p2 , int [] p3 ) {
87
+ double angle1 = Math .atan2 (p2 [1 ] - p1 [1 ], p2 [0 ] - p1 [0 ]);
88
+ double angle2 = Math .atan2 (p3 [1 ] - p1 [1 ], p3 [0 ] - p1 [0 ]);
89
+ double degree = Math .toDegrees (angle1 - angle2 );
90
+ return degree % 45 == 0 ;
91
+ }
88
92
}
89
93
90
94
}
0 commit comments