private int OptimizationAttempt1(int numDigits) { if (numDigits == 1) { return(9); } var upperLimit = (int)Math.Pow(10, numDigits) - 1; var lowerLimit = upperLimit - (int)Math.Pow(10, numDigits - 1); var range = new EulerRange(lowerLimit, upperLimit); HashSet <int> numbers = new HashSet <int>(); //Get every multiple foreach (var item in range) { range.Select(x => numbers.Add(item * x)).ToList(); } foreach (var item in numbers.OrderByDescending(x => x)) { if (NumberStringHelper.IsNumberPalindrome(item)) { return(item); } } return(-1); }