1
var tilingRectangle = function (n, m) {2
const queue = [[new Array(n).fill(0), 0]];4
const [curr, numSquares] = queue.shift();5
let min = { height: Infinity, start: Infinity, end: Infinity };6
for (let i = 0; i < n; i++) {7
if (curr[i] < min.height) {11
} else if (curr[i] === min.height && min.end === i) {15
if (min.height === m) return numSquares;16
const largestSquare = Math.min(m - min.height, min.end - min.start);17
for (let sqWidth = largestSquare; sqWidth; sqWidth--) {18
const next = curr.slice();19
for (let i = min.start; i < min.start + sqWidth; i++) {22
queue.push([next, numSquares + 1]);