Skip to main content

2698.js

/** ------------------------------------------------------------------------------
*
* 2698. Find the Punishment Number of an Integer
* Topics: Backtracking
* https://leetcode.com/problems/find-the-punishment-number-of-an-integer/description/
*
------------------------------------------------------------------------------ */
/**
* @param {number} n
* @return {number}
*/
var punishmentNumber = function (n) {
let check = (n, sq, sum, p) => {
if (sum === n && !sq.length) {
return true
}
if (p === sq.length) {
return false
}
if (!sq.length) {
return false
}
let res = false
for (let i = 1; i <= sq.length; i++) {
res = res || check(n, sq.slice(i), sum + Number(sq.slice(0, i)), 0)
}
return res
}

let start = 1
let res = []

while (start <= n) {
let sq = start ** 2
if (check(start, String(sq), 0, 0)) {
res.push(sq)
}
start++
}

return res.reduce((acc, curr) => acc + curr, 0)
}

console.log(punishmentNumber(10))