Чтение всех ваших чисел из файла и сохранение их на карте, где число является ключом, а логическое значение является значением, означающим, что это значение не было удалено.(Истина означает, что существует, ложь означает, что удалено).
Затем итерируйте свои ключи.Для каждого ключа установите для карты значение false для значений, которые вы хотите удалить из списка.
Еще раз переберите свой список и получите все ключи, для которых значение равно true.Это список оставшихся чисел.
public List<int> FilterNumbers(string fileName)
{
StreamReader sr = File.OpenTest(fileName);
string s = "";
Dictionary<int, bool> numbers = new Dictionary<int, bool>();
while((s = sr.ReadLine()) != null)
{
int number = Int32.Parse(s);
numbers.Add(number,true);
}
foreach(int number in numbers.Keys)
{
if(numbers[number])
{
if(numbers.ContainsKey(100000+number))
numbers[100000+number]=false;
if(numbers.ContainsKey(10000+number))
numbers[10000+number]=false;
if(numbers.ContainsKey(1000+number))
numbers[1000+number]=false;
if(numbers.ContainsKey(100+number))
numbers[100+number]=false;
if(numbers.ContainsKey(10+number))
numbers[10+number]=false;
if(numbers.ContainsKey(1+number))
numbers[1+number]=false;
}
}
List<int> validNumbers = new List<int>();
foreach(int number in numbers.Keys)
{
validNumbers.Add(number);
}
return validNumbers;
}
Это может потребоваться проверить, поскольку у меня нет компилятора C # на этом компьютере, и я немного заржавел.Алгоритм будет занимать бит памяти, который он запускает за линейное время.
** РЕДАКТИРОВАНИЕ ** Это приводит к проблемам, когда одно из чисел равно 9. Я обновлю код позже.