Ruby数据结构处理代码的迭代器/条件部分问题求助
修复Ruby数字降序重排函数的迭代逻辑问题
你的代码存在三个关键问题,导致迭代未按预期完成,输出结果错误:
- 条件判断错误:
if i=new.max()是赋值操作(把当前数组最大值赋给i),而非比较操作(判断i是否等于最大值)。这会导致循环逻辑完全偏离预期。 - 循环中修改迭代数组:
for循环遍历new数组时,执行new.delete(i)会直接修改数组结构,导致迭代流程被打断。而且Array#delete(i)会删除数组中所有匹配i的元素,直接丢失重复的目标数字(比如输入里的两个6)。 - 迭代思路冗余且错误:试图通过遍历原数组元素筛选最大值的逻辑完全没必要,反而会因为动态修改数组导致元素丢失或跳过。
修复后的简洁实现
直接利用排序完成降序重排是最可靠的方式,代码简洁且不易出错:
def descending_order(n) n.to_s.chars.sort.reverse.join.to_i end
或者如果你偏好使用digits方法:
def descending_order(n) n.digits.sort.reverse.join.to_i end
逻辑说明
n.to_s.chars:将输入数字转为字符串,再拆分为单个字符的数组(例如6022563会变成["6","0","2","2","5","6","3"])sort.reverse:对数组升序排序后反转,得到降序排列的数组(["6","6","5","3","2","2","0"])join.to_i:将字符数组拼接为字符串,再转换为整数,最终得到预期结果6653220
测试输入descending_order(6022563)会正确返回6653220。
内容的提问来源于stack exchange,提问作者Panamaniac507
相关产品推荐
相关产品推荐

