Skip to content

Commit 3a8359d

Browse files
author
beck chen
committed
more recursion problems
1 parent 1f548f3 commit 3a8359d

File tree

6 files changed

+233
-2
lines changed

6 files changed

+233
-2
lines changed

lessons/recursion/Recursion.drawio

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<mxfile host="Electron" modified="2021-09-21T17:34:51.996Z" agent="5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.9.6 Chrome/89.0.4389.128 Electron/12.0.16 Safari/537.36" etag="V4KqnrV2D8JVAcehu_HA" version="14.9.6" type="device" pages="2"><diagram id="VjPE4i1i8YUDDfjhyJEI" name="Permutation Without Repetition">7Vxdb6M4FP01PDbCNhDymLQzsy+rXW2lnZ1HGpwEDYGIOE2yv35NjRPwdTo0Jdi0K1UqXDAf5xwbn8slDrlfH74V0Wb1ex7T1MFufHDIg4MxCkjA/5WRo4h44VgElkUSVzudA4/Jv7QKulV0l8R029iR5XnKkk0zOM+zjM5ZIxYVRb5v7rbI0+ZZN9GSgsDjPEph9HsSs5WIhr57jv9Gk+VKnhm51ZZ1JHeuAttVFOf7Woh8cch9kedMLK0P9zQtwZO4iHZfL2w9XVhBM9amwSxfP0euO5v+/X0XeX/ti2m+uKuO8hylu+qGp0XBAy/LruPPIgff86Un8W8u/sWOzzcHKT/v7InvHizLpezUjlR3zI4SRkYP5S4rtk55APHFLSvyn/Q+T/OCR7I843vOFkmaKqEoTZYZX53z26Q8PnumBUs4QdNqwzqJ4/I0s/0qYfRxE83Lc+65HHmsyHdZTEsE3PLwecYeq4uSd86PRg8XIUUnorjCab6mrDjyXaoGEzTCvmh0bMp2f9YKklpZ1XQiRRFV8lyejn1mkC9UJL6BUAwIjQAZ/DC8+1yCrMZRtN2IPrVIDiWIDX4cTBaLBZ7PAZl8Sxw8BX7At3SAMp64CsYQZKLBmNwKYwIwfuoQ4w4Q8xXAQsOAeQCw2C7AvNAyxHyA2NwuxO5QEzEcGEYssF1jp2HLFsTGtg9jHrEMsdD2XukT3y7EJrZrzFeflaYnF3JctXcgC9SHpXHIoIuxrF8G2DbIoE+AiGXxtHTQzsmL1VDiN14c/3GEr3pZ+VHf8nCob3o4yrVDwl4ajfxq7Udty7lRuSLbiOuiMfDpCvj82vNdMaev3HU1cWdRsaTslf2wnswaWTpPJ2MFTSOWPDcvV8dgdYY/84TfyNnuqDMrVxGBuM2qVd3wqwcKFNH5yoEEDuBAL4I63fY7NAZ90pUaQwPSmDcEjaGxkraYXKuxsTciE0ImIQ65UlHYPCzxR4EbBC4ao/F4EsrNfQkQ+s5PMMj5LQVITAqwK/0hVX/YKgFCG/8JRsBgCAJEilEaXynA4FX98dMY1R9MihR0HSVZki2VPL8uwa8o9WPm8BEZj9QcvukkPoKpmS4NjZksfghwNp1kRTCf02V2wgzMQM7Gc0AIJoEsy2gQD9sGmhxbOpi7ilnAQCYPcuiz2z+pryTBo6Dt9IF4ikdX5yE3niFgmDq7VmZDElnYUmRCjaZURpA6LF3tk4gy30VezzrDXelsSE5IPvks1xkOwOPvWjtEXDQKL+aDDNshrEtIiiqm7SbKZB3TJYukKX7il1FvCSRtn2WS04p3vftXXwCNNYZJFkb1M1t6s9H9TA7XB85LR5huequ+MeiOMOhwt3wMo3WmokZK4slewrrgSOlS2kJCt1cDAs3xLxiyuEt1wBBRi1F0WSIdQ7frQ9BXX2Log3cepbIKYUhN2CczUiqt+s5HZgYrneb0kDHGDPS7l5j52MOZ5ypTAuN9prNqgSFlItpmuzw9mf/7wy79IemsXmBISYq2uTCjEvT8jgToTV4rWDEtwHfXC5iVEjYpEaJU8l6bKlWrzpHbrwZgKmNQGpgY1YCa5lbJG4oIYHpkUCJAFyaf/ajAV6vLhqoCmIL5Y50wlmTL8oG9SraCHga08WFsih8oVGrey/dbmyNfnLVINVvsIG9fRYU9DVNYw9TtvjqFXj+Go+jQynuaIxLRJFT6/bQXA5At+8ILFveYBw3mOj7bwO4pX0QR47+c4EH3/9lIuVNHF01SsGdSOqugH1YZnHx2/bpyJNQz2lMVPe4oLRPq8y52pGW8d1vygYoQtxWhUdOPldwgUWvb2n8wCWYK6reXt1bam1+621/O0sFzCXmquyBt377fbg534e37KKXZkl+SYEz8YTeDP5e1KYT4Bkhp5+5R+VKZ6OqTzsWw7+SXr55/dU303PNv15Ev/wE=</diagram><diagram id="mXPKz-lI0O_87XQeTtcW" name="n Queen Problem">7V1Nc6M4EP0tc6D25BRCCPBxkvm6TKWmUrVTeyQg29RgyGJ57OTXr7DBNjTj3dQm7u4hziHQgLDfU0v9uoXtyJvl9nMVPyy+lqnOHc9Nt4784HieCENl/9WWx71FhXJvmFdZ2px0NNxlT7oxuo11naV61TnRlGVusoeuMSmLQiemY4urqtx0T5uVefeuD/FcA8NdEufQ+j1LzWJvjZR7tH/R2XzR3lm4zZFl3J7cGFaLOC03Jyb50ZE3VVma/dZye6PzGrwWF+P/DGZ/Pt0mT399mnz//Li+FdvJvrFPz7nk8BEqXZiXbdrbN/0zztcNXs1nNY8tgFW5LlJdN+I68nqzyIy+e4iT+ujGdhlrW5hlbveE3Wya05XR2x7+//LmxQFR2xV1udSmerTXNa0cSGh6YdDsbo6Uysa0OGGztcVNJ5ofGj4CZTcarJ6Bm+SCm6KFm88Ft4gWbooLbj0/nSLjFnDBTdHCLeSCW0QLt4gLbj0/FR4ycFMuwCliwLVxNn3kImrICYDcN5rQTWQXOi/Eho68biCDFBelQK6LcZEKctpDDlsrCCgWiI5rvkcNOi56wVfUkOOiGIKIGnJcNEMoqCEHRQPRgS70iUHXDrynnU5du476AAC0UJguSitTlT/0TZmXlbUUZWHPvJ5led4zxXk2L+xuYqHT1n5dA5slcf6+ObDM0rS+zSAtXeJei5k2s9YS40Ni/AFivFcjBooSS4wYHzG+6DEjsZkZ0Dzq2hsfM6HrEmMGaiyi84ANMLvYSYU9EXCRWVZJU4OOS1FmIlxq0EGdxcZjI2zsuCgt6LHo0HGRWtBjsaGTMPqh6rHU5glJPgVMBikuwQi5LsYmFKE2JUj6kQgZqLgEHuT6GAw7qPWxthVqQkFyWRdCTp22GRj6yFFLifgDKViayFETCT4UCUSRozZF+GxSmOTyIf6AaKhLWZ5tzh1jRUv01gbIgYV2F83P+wPq5MDQCEtbE0GNoIFlLweCRljhEh41grhIr8OyQTLBHBvtJalpL5+L9pLUtFd7f/qdDvgrdjSnuIgv4K7oyHERX8Bd0ZEjX6Bp10RRmyIU1F5EBzqf3BzBpWTjU8vPKTaL9MlNEVBGcHFXdOi4LB0B7oqOHBcZoahNES2T9N1VUZsjAi4yQk2pIcdFRgB3xR7oAi4yAngrOnJsZARwV3ToztVWRlj96n/LBHrqPjhXWxlh8av/zDc+QQO1lTEXvxS18nEApdfV1ZU13C4zMzJyQrf7VKQceJD4ouS09YOXm7pPmXE8OVP1H6DRHgl2r/qKsjAn9v3rVev3vdBTYX/tWMhF7oAHW/Ch46J3JiE15LjoHeCvAfZXj4VcHnQB/ooPHZtvN+o7LD5055d5jVUyTkRvPZ4aCKqCiwZVL16n6QdVs5mXJENBVRrcByq46GCMnfEMuZR24GCMDh2X2g4Yi7GRa9NUJ8gl62r3GT23Kjd/rOz/b2uti7GNxp7fp0oBqqaXHI0jKK4sQfVV2RtL59TIZVmCOu6XDuVm9U5Zb63ipXbqXx/J18ti/752px/p/bu+5p3jBXnN531lt+ZmB23f8t6YOPnRNm+qtX43um7RC6UO3xV10i3EUCwVvFq/YFNbAmEotsCPuCxRE/9hMLosclyWqAlqSaWIy5MufW9FV/cRFxnT91Z85KCK+e1rGH3HRyehHXjeklNnn1RHz01NuZSawACNLfmnUKH8Nlk9MKajg82lOAUGYnTkoGB6y0ydDqkHosIr5MzUFAq00WemPFCwxCYJasFnJKbSLJ6XRZw7b6mp/9cvgu7CKfzE1HRI6Ta8tbRlmT1hd6x+u/uD9mb3R6JHxSHMOqNHw0Oi+9ckijcSL0ih3T3+Ovfu2MlvnMuP/wA=</diagram></mxfile>
1+
<mxfile host="Electron" modified="2021-09-23T16:53:23.035Z" agent="5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.9.6 Chrome/89.0.4389.128 Electron/12.0.16 Safari/537.36" etag="M-48bg6sKCjufAYRcQXz" version="14.9.6" type="device" pages="4"><diagram id="VjPE4i1i8YUDDfjhyJEI" name="Permutation Without Repetition">7Vxdb6M4FP01PDbCNhDymLQzsy+rXW2lnZ1HGpwEDYGIOE2yv35NjRPwdTo0Jdi0K1UqXDAf5xwbn8slDrlfH74V0Wb1ex7T1MFufHDIg4MxCkjA/5WRo4h44VgElkUSVzudA4/Jv7QKulV0l8R029iR5XnKkk0zOM+zjM5ZIxYVRb5v7rbI0+ZZN9GSgsDjPEph9HsSs5WIhr57jv9Gk+VKnhm51ZZ1JHeuAttVFOf7Woh8cch9kedMLK0P9zQtwZO4iHZfL2w9XVhBM9amwSxfP0euO5v+/X0XeX/ti2m+uKuO8hylu+qGp0XBAy/LruPPIgff86Un8W8u/sWOzzcHKT/v7InvHizLpezUjlR3zI4SRkYP5S4rtk55APHFLSvyn/Q+T/OCR7I843vOFkmaKqEoTZYZX53z26Q8PnumBUs4QdNqwzqJ4/I0s/0qYfRxE83Lc+65HHmsyHdZTEsE3PLwecYeq4uSd86PRg8XIUUnorjCab6mrDjyXaoGEzTCvmh0bMp2f9YKklpZ1XQiRRFV8lyejn1mkC9UJL6BUAwIjQAZ/DC8+1yCrMZRtN2IPrVIDiWIDX4cTBaLBZ7PAZl8Sxw8BX7At3SAMp64CsYQZKLBmNwKYwIwfuoQ4w4Q8xXAQsOAeQCw2C7AvNAyxHyA2NwuxO5QEzEcGEYssF1jp2HLFsTGtg9jHrEMsdD2XukT3y7EJrZrzFeflaYnF3JctXcgC9SHpXHIoIuxrF8G2DbIoE+AiGXxtHTQzsmL1VDiN14c/3GEr3pZ+VHf8nCob3o4yrVDwl4ajfxq7Udty7lRuSLbiOuiMfDpCvj82vNdMaev3HU1cWdRsaTslf2wnswaWTpPJ2MFTSOWPDcvV8dgdYY/84TfyNnuqDMrVxGBuM2qVd3wqwcKFNH5yoEEDuBAL4I63fY7NAZ90pUaQwPSmDcEjaGxkraYXKuxsTciE0ImIQ65UlHYPCzxR4EbBC4ao/F4EsrNfQkQ+s5PMMj5LQVITAqwK/0hVX/YKgFCG/8JRsBgCAJEilEaXynA4FX98dMY1R9MihR0HSVZki2VPL8uwa8o9WPm8BEZj9QcvukkPoKpmS4NjZksfghwNp1kRTCf02V2wgzMQM7Gc0AIJoEsy2gQD9sGmhxbOpi7ilnAQCYPcuiz2z+pryTBo6Dt9IF4ikdX5yE3niFgmDq7VmZDElnYUmRCjaZURpA6LF3tk4gy30VezzrDXelsSE5IPvks1xkOwOPvWjtEXDQKL+aDDNshrEtIiiqm7SbKZB3TJYukKX7il1FvCSRtn2WS04p3vftXXwCNNYZJFkb1M1t6s9H9TA7XB85LR5huequ+MeiOMOhwt3wMo3WmokZK4slewrrgSOlS2kJCt1cDAs3xLxiyuEt1wBBRi1F0WSIdQ7frQ9BXX2Log3cepbIKYUhN2CczUiqt+s5HZgYrneb0kDHGDPS7l5j52MOZ5ypTAuN9prNqgSFlItpmuzw9mf/7wy79IemsXmBISYq2uTCjEvT8jgToTV4rWDEtwHfXC5iVEjYpEaJU8l6bKlWrzpHbrwZgKmNQGpgY1YCa5lbJG4oIYHpkUCJAFyaf/ajAV6vLhqoCmIL5Y50wlmTL8oG9SraCHga08WFsih8oVGrey/dbmyNfnLVINVvsIG9fRYU9DVNYw9TtvjqFXj+Go+jQynuaIxLRJFT6/bQXA5At+8ILFveYBw3mOj7bwO4pX0QR47+c4EH3/9lIuVNHF01SsGdSOqugH1YZnHx2/bpyJNQz2lMVPe4oLRPq8y52pGW8d1vygYoQtxWhUdOPldwgUWvb2n8wCWYK6reXt1bam1+621/O0sFzCXmquyBt377fbg534e37KKXZkl+SYEz8YTeDP5e1KYT4Bkhp5+5R+VKZ6OqTzsWw7+SXr55/dU303PNv15Ev/wE=</diagram><diagram id="mXPKz-lI0O_87XQeTtcW" name="n Queen Problem">7V1Nc6M4EP0tc6D25BRCCPBxkvm6TKWmUrVTeyQg29RgyGJ57OTXr7DBNjTj3dQm7u4hziHQgLDfU0v9uoXtyJvl9nMVPyy+lqnOHc9Nt4784HieCENl/9WWx71FhXJvmFdZ2px0NNxlT7oxuo11naV61TnRlGVusoeuMSmLQiemY4urqtx0T5uVefeuD/FcA8NdEufQ+j1LzWJvjZR7tH/R2XzR3lm4zZFl3J7cGFaLOC03Jyb50ZE3VVma/dZye6PzGrwWF+P/DGZ/Pt0mT399mnz//Li+FdvJvrFPz7nk8BEqXZiXbdrbN/0zztcNXs1nNY8tgFW5LlJdN+I68nqzyIy+e4iT+ujGdhlrW5hlbveE3Wya05XR2x7+//LmxQFR2xV1udSmerTXNa0cSGh6YdDsbo6Uysa0OGGztcVNJ5ofGj4CZTcarJ6Bm+SCm6KFm88Ft4gWbooLbj0/nSLjFnDBTdHCLeSCW0QLt4gLbj0/FR4ycFMuwCliwLVxNn3kImrICYDcN5rQTWQXOi/Eho68biCDFBelQK6LcZEKctpDDlsrCCgWiI5rvkcNOi56wVfUkOOiGIKIGnJcNEMoqCEHRQPRgS70iUHXDrynnU5du476AAC0UJguSitTlT/0TZmXlbUUZWHPvJ5led4zxXk2L+xuYqHT1n5dA5slcf6+ObDM0rS+zSAtXeJei5k2s9YS40Ni/AFivFcjBooSS4wYHzG+6DEjsZkZ0Dzq2hsfM6HrEmMGaiyi84ANMLvYSYU9EXCRWVZJU4OOS1FmIlxq0EGdxcZjI2zsuCgt6LHo0HGRWtBjsaGTMPqh6rHU5glJPgVMBikuwQi5LsYmFKE2JUj6kQgZqLgEHuT6GAw7qPWxthVqQkFyWRdCTp22GRj6yFFLifgDKViayFETCT4UCUSRozZF+GxSmOTyIf6AaKhLWZ5tzh1jRUv01gbIgYV2F83P+wPq5MDQCEtbE0GNoIFlLweCRljhEh41grhIr8OyQTLBHBvtJalpL5+L9pLUtFd7f/qdDvgrdjSnuIgv4K7oyHERX8Bd0ZEjX6Bp10RRmyIU1F5EBzqf3BzBpWTjU8vPKTaL9MlNEVBGcHFXdOi4LB0B7oqOHBcZoahNES2T9N1VUZsjAi4yQk2pIcdFRgB3xR7oAi4yAngrOnJsZARwV3ToztVWRlj96n/LBHrqPjhXWxlh8av/zDc+QQO1lTEXvxS18nEApdfV1ZU13C4zMzJyQrf7VKQceJD4ouS09YOXm7pPmXE8OVP1H6DRHgl2r/qKsjAn9v3rVev3vdBTYX/tWMhF7oAHW/Ch46J3JiE15LjoHeCvAfZXj4VcHnQB/ooPHZtvN+o7LD5055d5jVUyTkRvPZ4aCKqCiwZVL16n6QdVs5mXJENBVRrcByq46GCMnfEMuZR24GCMDh2X2g4Yi7GRa9NUJ8gl62r3GT23Kjd/rOz/b2uti7GNxp7fp0oBqqaXHI0jKK4sQfVV2RtL59TIZVmCOu6XDuVm9U5Zb63ipXbqXx/J18ti/752px/p/bu+5p3jBXnN531lt+ZmB23f8t6YOPnRNm+qtX43um7RC6UO3xV10i3EUCwVvFq/YFNbAmEotsCPuCxRE/9hMLosclyWqAlqSaWIy5MufW9FV/cRFxnT91Z85KCK+e1rGH3HRyehHXjeklNnn1RHz01NuZSawACNLfmnUKH8Nlk9MKajg82lOAUGYnTkoGB6y0ydDqkHosIr5MzUFAq00WemPFCwxCYJasFnJKbSLJ6XRZw7b6mp/9cvgu7CKfzE1HRI6Ta8tbRlmT1hd6x+u/uD9mb3R6JHxSHMOqNHw0Oi+9ckijcSL0ih3T3+Ovfu2MlvnMuP/wA=</diagram><diagram id="Z0u5OO3KLfvnJMpve-6x" name="Palindromic Decomposition of a String">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</diagram><diagram id="yNebuSZaUVppTfN8g1l5" name="Unique Binary Search Trees">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</diagram></mxfile>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @param {string} num
3+
* @param {number} target
4+
* @return {string[]}
5+
*/
6+
var addOperators = function (numStr, target) {
7+
const results = [];
8+
9+
function helper(currentIndex, prevNum, totalVal, slate) {
10+
if (currentIndex === numStr.length && totalVal === target) {
11+
results.push(slate);
12+
return
13+
}
14+
15+
const lastIndex = numStr[currentIndex] === '0' ? currentIndex + 1 : numStr.length;
16+
17+
for (let endIndex = currentIndex; endIndex < numStr.length; endIndex++) {
18+
const currentNum = parseInt(numStr.slice(currentIndex, endIndex + 1), 10);
19+
20+
if (slate === '') {
21+
helper(endIndex + 1, currentNum, currentNum, `${currentNum}`);
22+
} else {
23+
// +
24+
helper(endIndex + 1, currentNum, totalVal + currentNum, slate + `+${currentNum}`);
25+
26+
// -
27+
// helper(endIndex + 1, 0 - currentNum, totalVal - currentNum, slate + `-${currentNum}`);
28+
29+
// *
30+
const product = prevNum * currentNum;
31+
const curentTotal = (totalVal - prevNum) + product;
32+
helper(endIndex + 1, product, curentTotal, slate + `*${currentNum}`);
33+
}
34+
}
35+
}
36+
37+
helper(0, 0, 0, '');
38+
return results;
39+
};
40+
41+
console.log(addOperators('00000000010', 0));
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
2+
/*
3+
* Complete the function below.
4+
*/
5+
function generate_palindromic_decompositions(s) {
6+
const results = [];
7+
helper(0, [], s, results);
8+
return results;
9+
}
10+
11+
function helper(startIndex, slate, fullStr, results) {
12+
if (startIndex === fullStr.length) {
13+
results.push(slate.join('|'));
14+
return;
15+
}
16+
17+
for (let endIndex = startIndex; endIndex < fullStr.length; endIndex++) {
18+
const currentSubstr = fullStr.substring(startIndex, endIndex + 1);
19+
if (isPalindrome(currentSubstr)) {
20+
slate.push(currentSubstr);
21+
helper(endIndex + 1, slate, fullStr, results);
22+
slate.pop();
23+
}
24+
}
25+
}
26+
27+
function isPalindrome(str) {
28+
let leftIndex = 0, rightIndex = str.length - 1;
29+
while (leftIndex < rightIndex) {
30+
if (str[leftIndex] !== str[rightIndex]) {
31+
return false;
32+
}
33+
leftIndex++;
34+
rightIndex--;
35+
}
36+
37+
return true;
38+
}
39+
/*
40+
* Complete the function below.
41+
*/
42+
function generate_palindromic_decompositions(s) {
43+
const results = [];
44+
helper(0, [], s, results);
45+
return results;
46+
}
47+
48+
function helper(startIndex, slate, fullStr, results) {
49+
if (startIndex === fullStr.length) {
50+
results.push(slate.join('|'));
51+
return;
52+
}
53+
54+
for (let endIndex = startIndex; endIndex < fullStr.length; endIndex++) {
55+
const currentSubstr = fullStr.substring(startIndex, endIndex + 1);
56+
if (isPalindrome(currentSubstr)) {
57+
slate.push(currentSubstr);
58+
helper(endIndex + 1, slate, fullStr, results);
59+
slate.pop();
60+
}
61+
}
62+
}
63+
64+
function isPalindrome(str) {
65+
let leftIndex = 0, rightIndex = str.length - 1;
66+
while (leftIndex < rightIndex) {
67+
if (str[leftIndex] !== str[rightIndex]) {
68+
return false;
69+
}
70+
leftIndex++;
71+
rightIndex--;
72+
}
73+
74+
return true;
75+
}

lessons/recursion/sudokuSolver.js

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/**
2+
* @param {character[][]} board
3+
* @return {void} Do not return anything, modify board in-place instead.
4+
*/
5+
6+
/**
7+
* @param {list_list_int32} board
8+
* @return {list_list_int32}
9+
*/
10+
function solveSudoku(board) {
11+
// Write your code here.
12+
const boardSize = board.length;
13+
const rowTrackerArr = [],
14+
colTrackerArr = [],
15+
squareTrackerArr = [];
16+
17+
for (let ii = 0; ii < boardSize; ii++) {
18+
rowTrackerArr[ii] = Array(boardSize + 1).fill(0);
19+
colTrackerArr[ii] = Array(boardSize + 1).fill(0);
20+
squareTrackerArr[ii] = Array(boardSize + 1).fill(0);
21+
}
22+
23+
for (let rowIndex = 0; rowIndex < boardSize; rowIndex++) {
24+
for (let colIndex = 0; colIndex < boardSize; colIndex++) {
25+
const num = board[rowIndex][colIndex];
26+
if (num === '.') { continue; }
27+
rowTrackerArr[rowIndex][num]++;
28+
colTrackerArr[colIndex][num]++;
29+
30+
// fill in squareTrackerArr
31+
const squareIndex = getSquareIndex(rowIndex, colIndex);
32+
squareTrackerArr[squareIndex][num]++;
33+
}
34+
}
35+
36+
function helper(rowIndex, colIndex) {
37+
if (rowIndex === boardSize - 1 && colIndex === boardSize) {
38+
return true;
39+
}
40+
41+
if (colIndex === boardSize) {
42+
return helper(rowIndex + 1, 0);
43+
}
44+
45+
if (board[rowIndex][colIndex] !== '.') {
46+
return helper(rowIndex, colIndex + 1);
47+
}
48+
49+
const squareIndex = getSquareIndex(rowIndex, colIndex);
50+
51+
for (let newNum = 1; newNum <= 9; newNum++) {
52+
if (rowTrackerArr[rowIndex][newNum] || colTrackerArr[colIndex][newNum] || squareTrackerArr[squareIndex][newNum]) {
53+
continue;
54+
}
55+
56+
// insert number into board and tracker arrays
57+
board[rowIndex][colIndex] = newNum.toString();
58+
rowTrackerArr[rowIndex][newNum]++;
59+
colTrackerArr[colIndex][newNum]++;
60+
squareTrackerArr[squareIndex][newNum]++;
61+
62+
if (helper(rowIndex, colIndex + 1)) {
63+
return true;
64+
}
65+
66+
// if helper doesnt return true it means this number isnt promising
67+
// so revert it back from the board
68+
board[rowIndex][colIndex] = '.';
69+
rowTrackerArr[rowIndex][newNum]--;
70+
colTrackerArr[colIndex][newNum]--;
71+
squareTrackerArr[squareIndex][newNum]--;
72+
}
73+
}
74+
75+
helper(0, 0);
76+
return board;
77+
}
78+
79+
function getSquareIndex(rowIndex, colIndex) {
80+
return 3 * Math.floor(rowIndex / 3) + Math.floor(colIndex / 3);
81+
}
82+
83+
const testBoard = [[".", ".", "9", "7", "4", "8", ".", ".", "."], ["7", ".", ".", ".", ".", ".", ".", ".", "."], [".", "2", ".", "1", ".", "9", ".", ".", "."], [".", ".", "7", ".", ".", ".", "2", "4", "."], [".", "6", "4", ".", "1", ".", "5", "9", "."], [".", "9", "8", ".", ".", ".", "3", ".", "."], [".", ".", ".", "8", ".", "3", ".", "2", "."], [".", ".", ".", ".", ".", ".", ".", ".", "6"], [".", ".", ".", "2", "7", "5", "9", ".", "."]];
84+
console.info(solveSudoku(testBoard)[8]);

0 commit comments

Comments
 (0)