Счастливый номер в JavaScript- LeetCode
Всем привет,
Это первый день решения проблем с JavaScript.
Чтобы дать толчок этому путешествию, у меня есть счастливая задача — Счастливая задача с числом в LeetCode.
Что такое счастливое число?
Счастливое число – это число, определяемое следующим процессом:
- Начиная с любого положительного целого числа, замените число суммой квадратов его цифр.
- Повторяйте процесс до тех пор, пока число не станет равным 1 (где оно и останется), иначе будет бесконечный цикл, не включающий 1.
- Те числа, для которых этот процесс оканчивается на 1, являются числами Хэппи.
Помните, что неудовлетворительные числа никогда не уменьшатся до 1.
Пример логики:
Input: n = 19 Explanation: 19: (1)^2 + (9)^2 = 1+81 = 82 82: (8)^2 + (2)^2 = 64+4 = 68 68: (6)^2 + (8)^2 = 36+64 = 100 100: (1)^2 + (0)^2 + (0)^2 = 1 Output: true
Как решить?
Настоящая проблема этой проблемы заключается в том, что мы не знаем, сколько раз нам придется повторять процесс возведения в квадрат и суммирования цифр, так как это может привести к бесконечному циклу.
Следовательно, мы должны найти способ завершить бесконечный цикл.
Решение
Ссылка на репозиторий GitHub — https://github.com/Starboy369/JSProblemSolving (Отметьте мой репозиторий звездочкой, чтобы найти все решения на JavaScript)
Фрагмент кода
var repetetionarray =[] function findhappynumber(n){ var arr = n.toString().split('') console.log("array", arr) var psum = 0; sum = arr.reduce((psum, a)=> psum + a*a, 0);//reduce method console.log(sum) if(sum ==1){ return true }else if(repetetionarray.includes(sum)) { //to avoid infinite loop return false }else { repetetionarray.push(sum) var number =sum; return findhappynumber(number) // recursive function } }
Пояснение
Как я уже упоминал ранее, реальная задача состоит в том, чтобы спасти наши ресурсы от бесконечного цикла.
Чтобы смягчить это, я использовал массив, чтобы проверить, получили ли мы уже сумму, и завершить рекурсию.
В моем решении для этого используется «repetetionarray».
Используемые концепции JavaScript
1. Метод уменьшения массива JavaScript — https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
2. Рекурсивная функция — https://developer.mozilla.org/en-US/docs/ Глоссарий/Рекурсия
Заключение
Таким образом, мы можем решить эту проблему, определив подход к завершению бесконечного цикла на основе условия.
Дайте мне знать, если есть лучший подход к решению этой проблемы. Рад учиться у всех вас!
Я буду каждый день публиковать блоги с проблемами, решенными в JavaScript. Следуйте за мной, чтобы никогда не пропустить решение.
Удачного кодирования на JavaScript!!!