diff --git a/solution/2000-2099/2059.Minimum Operations to Convert Number/README.md b/solution/2000-2099/2059.Minimum Operations to Convert Number/README.md index f05eaf6acf82b..f5ae4884b251c 100644 --- a/solution/2000-2099/2059.Minimum Operations to Convert Number/README.md +++ b/solution/2000-2099/2059.Minimum Operations to Convert Number/README.md @@ -89,6 +89,8 @@ +BFS + ### **Python3** @@ -107,6 +109,37 @@ ``` +### **TypeScript** + +```ts +function minimumOperations(nums: number[], start: number, goal: number): number { + const n = nums.length; + const op1 = function (x: number, y: number): number { return x + y; }; + const op2 = function (x: number, y: number): number { return x - y; }; + const op3 = function (x: number, y: number): number { return x ^ y; }; + const ops = [op1, op2, op3]; + let vis = new Array(1001).fill(false); + let quenue: Array> = [[start, 0]]; + vis[start] = true; + while (quenue.length) { + let [x, step] = quenue.shift(); + for (let i = 0; i < n; i++) { + for (let j = 0; j < ops.length; j++) { + const nx = ops[j](x, nums[i]); + if (nx == goal) { + return step + 1; + } + if (nx >= 0 && nx <= 1000 && !vis[nx]) { + vis[nx] = true; + quenue.push([nx, step + 1]); + } + } + } + } + return -1; +}; +``` + ### **...** ``` diff --git a/solution/2000-2099/2059.Minimum Operations to Convert Number/README_EN.md b/solution/2000-2099/2059.Minimum Operations to Convert Number/README_EN.md index 3b9358dd7e21c..04b25e6b02cb6 100644 --- a/solution/2000-2099/2059.Minimum Operations to Convert Number/README_EN.md +++ b/solution/2000-2099/2059.Minimum Operations to Convert Number/README_EN.md @@ -86,6 +86,8 @@ We can go from 0 → 1 → 2 → 3 with the following 3 operations. ## Solutions +BFS + ### **Python3** @@ -100,6 +102,37 @@ We can go from 0 → 1 → 2 → 3 with the following 3 operations. ``` +### **TypeScript** + +```ts +function minimumOperations(nums: number[], start: number, goal: number): number { + const n = nums.length; + const op1 = function (x: number, y: number): number { return x + y; }; + const op2 = function (x: number, y: number): number { return x - y; }; + const op3 = function (x: number, y: number): number { return x ^ y; }; + const ops = [op1, op2, op3]; + let vis = new Array(1001).fill(false); + let quenue: Array> = [[start, 0]]; + vis[start] = true; + while (quenue.length) { + let [x, step] = quenue.shift(); + for (let i = 0; i < n; i++) { + for (let j = 0; j < ops.length; j++) { + const nx = ops[j](x, nums[i]); + if (nx == goal) { + return step + 1; + } + if (nx >= 0 && nx <= 1000 && !vis[nx]) { + vis[nx] = true; + quenue.push([nx, step + 1]); + } + } + } + } + return -1; +}; +``` + ### **...** ``` diff --git a/solution/2000-2099/2059.Minimum Operations to Convert Number/Solution.ts b/solution/2000-2099/2059.Minimum Operations to Convert Number/Solution.ts new file mode 100644 index 0000000000000..eb1ec4dc3ca5c --- /dev/null +++ b/solution/2000-2099/2059.Minimum Operations to Convert Number/Solution.ts @@ -0,0 +1,26 @@ +function minimumOperations(nums: number[], start: number, goal: number): number { + const n = nums.length; + const op1 = function (x: number, y: number): number { return x + y; }; + const op2 = function (x: number, y: number): number { return x - y; }; + const op3 = function (x: number, y: number): number { return x ^ y; }; + const ops = [op1, op2, op3]; + let vis = new Array(1001).fill(false); + let quenue: Array> = [[start, 0]]; + vis[start] = true; + while (quenue.length) { + let [x, step] = quenue.shift(); + for (let i = 0; i < n; i++) { + for (let j = 0; j < ops.length; j++) { + const nx = ops[j](x, nums[i]); + if (nx == goal) { + return step + 1; + } + if (nx >= 0 && nx <= 1000 && !vis[nx]) { + vis[nx] = true; + quenue.push([nx, step + 1]); + } + } + } + } + return -1; +}; \ No newline at end of file