202. Happy Number
Содержание
Решение задачи 202 “Счастливые числа” с https://leetcode.com
Условие задачи
Счастливые числа - эта числа, которые можно проверить следующим алгоритмом: это число положительное, складываем квадраты всех его цифр, повторяем процесс пока не сумма не станет равной 1 ( если алгоритм зациклился - числа не являются счастливыми ).
Пример
Input: 19
Output: true
Объяснение:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1Решение
Идея решения - проверяем в лоб.
Для этого заводим коллекцию, где ключом будем число ( сумма квадратов цифр числа n ) - значение всегда true. Запускаем цикл с условием n!=1 ( n не равен единице ). в цикле считаем сумму квадратов цифр.
Потом проверяем - есть ли эта сумма в ранне созданное коллекции:
- Если эта сумма уже встречалась, значит мы зациклились и можно число не является счастливым.
- Если суммы нет в коллекции - добавляем её в коллецию.
Если мы вышли из цикла - значит сумма квадратов стала равно единицы и изначальное число было счастливым.
func isHappy(n int) bool {
if n <=0 {
return false
}
used := make(map[int]bool)
used[n] = true
for n!=1 {
k:= n
sum := 0
for k>0 {
w:=k%10
k = k/10
sum +=w*w
}
if _, ok := used[sum]; ok {
return false
}
used[sum] = true
n = sum
}
return true
}