对c中的整数数组(最好将它们当作字符串)执行以下操作的最佳解决方案是:
例1:
数组包括:
440 - 441 - 442 - 443 - 444 - 445 - 446 - 447 - 448 - 449 - 51 - 9876
结果应该是:
44 - 51 - 9876
应用规则441到449替换为44,因为我们有完整的0-9集
例2
数组包括:
440 - 441 - 442 - 443 - 444 - 445 - 446 - 447 - 448 - 449 - 40 - 41 - 42 - 43 - 45 - 46 - 47 - 48 - 49
结果应该是:
4 - 51 - 9876
应用规则:首先3个字符串(所有以44开头的字符串)减少到44,然后同一规则将40减少到49减少到4。
最佳答案
懒得用LINQ怎么样?
int[] arr1 = { 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 51, 9876 };
// This is just one reduction step, you would need loop over it until
// no more reduction is possible.
var r = arr1.GroupBy(g => g / 10).
SelectMany(s => s.Count() == 10 ? new int[] {s.Key} : s.AsEnumerable());