Какие методы можно использовать для поиска чисел, в которых цифры повторяются?

Как можно отфильтровать числа, состоящие из одинаковых цифр, например 404 или 18538, в массиве чисел? В предоставленном коде используется регулярное выражение, которое фильтрует числа только с повторяющимися цифрами, как можно изменить его для достижения требуемого результата?
  • 5 октября 2023 г. 3:17
Ответы на вопрос 3
Для поиска чисел, в которых цифры повторяются, можно использовать следующие методы:

1. Метод конвертации числа в строку и сравнение каждой цифры в строке с остальными цифрами.
   Пример:

```python
num = 123456
num_str = str(num)
repeated_digits = []

for digit in num_str:
    if num_str.count(digit) > 1 and digit not in repeated_digits:
        repeated_digits.append(digit)

print(repeated_digits)  # ['2']
```

2. Метод использования словаря для подсчета повторяющихся цифр.
   Пример:

```python
num = 123456
digit_count = {}

while num > 0:
    digit = num % 10
    if digit in digit_count:
        digit_count[digit] += 1
    else:
        digit_count[digit] = 1
    num = num // 10

repeated_digits = [digit for digit, count in digit_count.items() if count > 1]
print(repeated_digits)  # [2]
```

Чтобы отфильтровать числа, состоящие из одинаковых цифр, можно изменить регулярное выражение в предоставленном коде.
Измените регулярное выражение `(.)\1+` на `^(.)\1*$`. Это регулярное выражение будет соответствовать только числам, состоящим из одинаковых цифр.
Пример:

```python
import re

numbers = [404, 18538]

filtered_numbers = [num for num in numbers if not re.match(r'^(.)\1*$', str(num))]

print(filtered_numbers)  # [18538]
```

В этом примере числа 404 были отфильтрованы, поскольку они состоят из одинаковых цифр, в то время как число 18538 осталось в массиве, поскольку оно имеет различные цифры.
arr.splice(0, arr.length, ...arr.filter(n => !/(.).*\1/.test(n)))

или

let numDeleted = 0;

for (let i = 0; i < arr.length; i++) {
  const n = arr[i];
  arr[i - numDeleted] = n;
  numDeleted += `${n}`.length !== new Set(`${n}`).size;
}

arr.length -= numDeleted;


Можно использовать следующий метод для удаления повторяющихся элементов из массива:

const removeDuplicates = (array: any[]): any[] => {
    return array.filter((value, index, self) => {
        return self.indexOf(value) === index;
    });
};

Такой подход позволяет сохранить только уникальные элементы из исходного массива.

Или нужен метод с использованием регулярного выражения?
Похожие вопросы