Skip to content

Commit fccbb99

Browse files
Add solutions to q 148
1 parent 20a7432 commit fccbb99

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

code/148-generate-gray-code.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
Gray code is a binary code where each successive value differ
3+
in only one bit, as well as when wrapping around.
4+
Gray code is common in hardware so that we don't see temporary spurious values during transitions.
5+
6+
Given a number of bits n, generate a possible gray code for it.
7+
8+
For example, for n = 2, one gray code would be [00, 01, 11, 10].
9+
10+
https://en.wikipedia.org/wiki/Gray_code
11+
*/
12+
13+
// use recursion to solve gray code problem
14+
(() => {
15+
function grayCode(n: number): number[] {
16+
if (n === 0) return [];
17+
else if (n === 1) return [0, 1];
18+
19+
const prevGrayCode = grayCode(n - 1);
20+
const result = [];
21+
22+
for (const code of prevGrayCode) {
23+
result.push(code);
24+
}
25+
26+
for (const code of prevGrayCode.reverse()) {
27+
result.push((1 << n - 1) + code);
28+
}
29+
30+
return result;
31+
}
32+
33+
console.log(grayCode(2).map(x => x.toString(2)));
34+
})();

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@
149149
"144": "nodemon --exec ts-node code/144-nearest-larger-number.ts",
150150
"145": "nodemon --exec ts-node code/145-swap-every-two-nodes-linked-list.ts",
151151
"146": "nodemon --exec ts-node code/146-prune-a-tree.ts",
152-
"147": "nodemon --exec ts-node code/147-sort-a-list-using-reverse.ts"
152+
"147": "nodemon --exec ts-node code/147-sort-a-list-using-reverse.ts",
153+
"148": "nodemon --exec ts-node code/148-generate-gray-code.ts"
153154
},
154155
"keywords": [],
155156
"author": "",

0 commit comments

Comments
 (0)