-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUnique3DigitEvenNumbers.java
More file actions
84 lines (76 loc) · 2.47 KB
/
Unique3DigitEvenNumbers.java
File metadata and controls
84 lines (76 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package Algorithms.BackTracking;
import java.util.HashSet;
import java.util.Set;
/**
* @author Srinivas Vadige, srinivas.vadige@gmail.com
* @since 15 March 2025
*/
public class Unique3DigitEvenNumbers {
public static void main(String[] args) {
int[] digit = {1,2,3,4,5,6,7,8,9,0};
System.out.println("unique3DigitEvenNumbers(digit) => " + unique3DigitEvenNumbers(digit));
}
public static int unique3DigitEvenNumbers(int[] digit) {
int count = 0;
for (int i = 0; i < digit.length; i++) {
for (int j = 0; j < digit.length; j++) {
for (int k = 0; k < digit.length; k++) {
if (digit[i] * 100 + digit[j] * 10 + digit[k] % 2 == 0) {
count++;
}
}
}
}
return count;
}
/**
PATTERNS:
--------
1) The last 3rd digit has to be an even number
2) When digits=[0,2,2];
3) Even nums set = [0,2]
4) Add them to the stack
[]
_________|_________
| |
[,0] [,1] ----> for loop for evens
______|______
| |
[1,0] [2,0]
| |
[2,1,0] [2,0,1]
5) or Prepare all possible outcomes and c++ for even
*/
Set<String> set = new HashSet<>();
public int totalNumbersMyApproach(int[] digits) {
boolean[] arr = new boolean[10]; // arr indices
for(int i=0; i<digits.length; i++) {
if (digits[i]%2==0 && !arr[i]) arr[i]=true;
}
for (int i=0; i<digits.length; i++) {
if(arr[i]) {
boolean[] marked = new boolean[digits.length];
marked[i]=true;
String s = "";
backtrack(i, digits, marked, s);
}
}
// System.out.println(set);
return set.size();
}
private void backtrack(int i, int[] digits, boolean[] marked, String s) {
// add num to s
s = digits[i]+s;
if(s.length()==3) {
if (s.charAt(0)!='0') set.add(s);
return;
}
for(int j=0; j<marked.length; j++){
if (!marked[j]) {
boolean[] newMarked = marked.clone();
newMarked[j]=true;
backtrack(j, digits, newMarked, s);
}
}
}
}