Skip to content

Commit 2fed9aa

Browse files
committedMar 25, 2022
feat: add solutions to lc problem: No.0401
No.0401.Binary Watch
1 parent 1073f0f commit 2fed9aa

File tree

4 files changed

+251
-0
lines changed

4 files changed

+251
-0
lines changed
 

‎solution/0400-0499/0401.Binary Watch/README.md

+87
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,93 @@ class Solution {
9494
}
9595
```
9696

97+
### **TypeScript**
98+
99+
```ts
100+
function readBinaryWatch(turnedOn: number): string[] {
101+
if (turnedOn === 0) {
102+
return ['0:00'];
103+
}
104+
const n = 10;
105+
const res = [];
106+
const bitArr = new Array(10).fill(false);
107+
const createTime = () => {
108+
return [
109+
bitArr.slice(0, 4).reduce((p, v) => (p << 1) | Number(v), 0),
110+
bitArr.slice(4).reduce((p, v) => (p << 1) | Number(v), 0),
111+
];
112+
};
113+
const helper = (i: number, count: number) => {
114+
if (i + count > n || count === 0) {
115+
return;
116+
}
117+
bitArr[i] = true;
118+
if (count === 1) {
119+
const [h, m] = createTime();
120+
if (h < 12 && m < 60) {
121+
res.push(`${h}:${m < 10 ? '0' + m : m}`);
122+
}
123+
}
124+
helper(i + 1, count - 1);
125+
bitArr[i] = false;
126+
helper(i + 1, count);
127+
};
128+
helper(0, turnedOn);
129+
return res;
130+
}
131+
```
132+
133+
### **Rust**
134+
135+
```rust
136+
impl Solution {
137+
fn create_time(bit_arr: &[bool; 10]) -> (i32, i32) {
138+
let mut h = 0;
139+
let mut m = 0;
140+
for i in 0..4 {
141+
h <<= 1;
142+
h |= if bit_arr[i] { 1 } else { 0 };
143+
}
144+
for i in 4..10 {
145+
m <<= 1;
146+
m |= if bit_arr[i] { 1 } else { 0 };
147+
}
148+
149+
(h, m)
150+
}
151+
152+
fn helper(res: &mut Vec<String>, bit_arr: &mut [bool; 10], i: usize, count: usize) {
153+
if i + count > 10 || count == 0 {
154+
return;
155+
}
156+
bit_arr[i] = true;
157+
if count == 1 {
158+
let (h, m) = Self::create_time(bit_arr);
159+
if h < 12 && m < 60 {
160+
if m < 10 {
161+
res.push(format!("{}:0{}", h, m));
162+
} else {
163+
res.push(format!("{}:{}", h, m));
164+
}
165+
}
166+
}
167+
Self::helper(res, bit_arr, i + 1, count - 1);
168+
bit_arr[i] = false;
169+
Self::helper(res, bit_arr, i + 1, count);
170+
}
171+
172+
pub fn read_binary_watch(turned_on: i32) -> Vec<String> {
173+
if turned_on == 0 {
174+
return vec![String::from("0:00")];
175+
}
176+
let mut res = vec![];
177+
let mut bit_arr = [false; 10];
178+
Self::helper(&mut res, &mut bit_arr, 0, turned_on as usize);
179+
res
180+
}
181+
}
182+
```
183+
97184
### **...**
98185

99186
```

‎solution/0400-0499/0401.Binary Watch/README_EN.md

+87
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,93 @@ class Solution {
7171
}
7272
```
7373

74+
### **TypeScript**
75+
76+
```ts
77+
function readBinaryWatch(turnedOn: number): string[] {
78+
if (turnedOn === 0) {
79+
return ['0:00'];
80+
}
81+
const n = 10;
82+
const res = [];
83+
const bitArr = new Array(10).fill(false);
84+
const createTime = () => {
85+
return [
86+
bitArr.slice(0, 4).reduce((p, v) => (p << 1) | Number(v), 0),
87+
bitArr.slice(4).reduce((p, v) => (p << 1) | Number(v), 0),
88+
];
89+
};
90+
const helper = (i: number, count: number) => {
91+
if (i + count > n || count === 0) {
92+
return;
93+
}
94+
bitArr[i] = true;
95+
if (count === 1) {
96+
const [h, m] = createTime();
97+
if (h < 12 && m < 60) {
98+
res.push(`${h}:${m < 10 ? '0' + m : m}`);
99+
}
100+
}
101+
helper(i + 1, count - 1);
102+
bitArr[i] = false;
103+
helper(i + 1, count);
104+
};
105+
helper(0, turnedOn);
106+
return res;
107+
}
108+
```
109+
110+
### **Rust**
111+
112+
```rust
113+
impl Solution {
114+
fn create_time(bit_arr: &[bool; 10]) -> (i32, i32) {
115+
let mut h = 0;
116+
let mut m = 0;
117+
for i in 0..4 {
118+
h <<= 1;
119+
h |= if bit_arr[i] { 1 } else { 0 };
120+
}
121+
for i in 4..10 {
122+
m <<= 1;
123+
m |= if bit_arr[i] { 1 } else { 0 };
124+
}
125+
126+
(h, m)
127+
}
128+
129+
fn helper(res: &mut Vec<String>, bit_arr: &mut [bool; 10], i: usize, count: usize) {
130+
if i + count > 10 || count == 0 {
131+
return;
132+
}
133+
bit_arr[i] = true;
134+
if count == 1 {
135+
let (h, m) = Self::create_time(bit_arr);
136+
if h < 12 && m < 60 {
137+
if m < 10 {
138+
res.push(format!("{}:0{}", h, m));
139+
} else {
140+
res.push(format!("{}:{}", h, m));
141+
}
142+
}
143+
}
144+
Self::helper(res, bit_arr, i + 1, count - 1);
145+
bit_arr[i] = false;
146+
Self::helper(res, bit_arr, i + 1, count);
147+
}
148+
149+
pub fn read_binary_watch(turned_on: i32) -> Vec<String> {
150+
if turned_on == 0 {
151+
return vec![String::from("0:00")];
152+
}
153+
let mut res = vec![];
154+
let mut bit_arr = [false; 10];
155+
Self::helper(&mut res, &mut bit_arr, 0, turned_on as usize);
156+
res
157+
}
158+
}
159+
```
160+
74161
### **...**
75162

76163
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
impl Solution {
2+
fn create_time(bit_arr: &[bool; 10]) -> (i32, i32) {
3+
let mut h = 0;
4+
let mut m = 0;
5+
for i in 0..4 {
6+
h <<= 1;
7+
h |= if bit_arr[i] { 1 } else { 0 };
8+
}
9+
for i in 4..10 {
10+
m <<= 1;
11+
m |= if bit_arr[i] { 1 } else { 0 };
12+
}
13+
14+
(h, m)
15+
}
16+
17+
fn helper(res: &mut Vec<String>, bit_arr: &mut [bool; 10], i: usize, count: usize) {
18+
if i + count > 10 || count == 0 {
19+
return;
20+
}
21+
bit_arr[i] = true;
22+
if count == 1 {
23+
let (h, m) = Self::create_time(bit_arr);
24+
if h < 12 && m < 60 {
25+
if m < 10 {
26+
res.push(format!("{}:0{}", h, m));
27+
} else {
28+
res.push(format!("{}:{}", h, m));
29+
}
30+
}
31+
}
32+
Self::helper(res, bit_arr, i + 1, count - 1);
33+
bit_arr[i] = false;
34+
Self::helper(res, bit_arr, i + 1, count);
35+
}
36+
37+
pub fn read_binary_watch(turned_on: i32) -> Vec<String> {
38+
if turned_on == 0 {
39+
return vec![String::from("0:00")];
40+
}
41+
let mut res = vec![];
42+
let mut bit_arr = [false; 10];
43+
Self::helper(&mut res, &mut bit_arr, 0, turned_on as usize);
44+
res
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
function readBinaryWatch(turnedOn: number): string[] {
2+
if (turnedOn === 0) {
3+
return ['0:00'];
4+
}
5+
const n = 10;
6+
const res = [];
7+
const bitArr = new Array(10).fill(false);
8+
const createTime = () => {
9+
return [
10+
bitArr.slice(0, 4).reduce((p, v) => (p << 1) | Number(v), 0),
11+
bitArr.slice(4).reduce((p, v) => (p << 1) | Number(v), 0),
12+
];
13+
};
14+
const helper = (i: number, count: number) => {
15+
if (i + count > n || count === 0) {
16+
return;
17+
}
18+
bitArr[i] = true;
19+
if (count === 1) {
20+
const [h, m] = createTime();
21+
if (h < 12 && m < 60) {
22+
res.push(`${h}:${m < 10 ? '0' + m : m}`);
23+
}
24+
}
25+
helper(i + 1, count - 1);
26+
bitArr[i] = false;
27+
helper(i + 1, count);
28+
};
29+
helper(0, turnedOn);
30+
return res;
31+
}

0 commit comments

Comments
 (0)