Счастливый номер в 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!!!