4 回答
TA贡献1898条经验 获得超8个赞
我建议使用以下代码:
public static List<Integer> getOdd(int l, int r) {
List<Integer> odd = new ArrayList<Integer>();
if (l % 2 == 0)
l++;
while(l <= r) {
odd.add(l);
l += 2;
}
return odd;
}
TA贡献1712条经验 获得超3个赞
正如评论中提到的,您在循环中排除了,并且可能返回了错误的数据结构?r
此外,您的代码所做的远远超出了它需要的
你只需要一个循环
你根本不需要 - 只需修改
tmp
l
你不需要所有的 if/else 块
我建议如下:
static int[] oddNumbers(int l, int r) {
List<Integer> list1 = new ArrayList<>();
if (l % 2 == 0) l++;
for(; l <= r; l += 2) {
list1.add(l);
}
return list1.stream().mapToInt(i->i).toArray(); // https://stackoverflow.com/a/23945015/2554605
}
您可以根据挑战要求添加回来是否需要它,但我不是说这是必要的(请注意,我有,而不仅仅是为了涵盖这种情况)。if ((r >= l) && (l >= 1) && (r <= 100000))r >= lr > lr == l
同样,如果您真的被允许返回而不是 ,那么就像您拥有的那样。List<Integer>int[]return list1;
TA贡献2012条经验 获得超12个赞
此版本应该可以正常工作
static List<int> oddNumbers(int l, int r)
{
List<int> list1 = new List<int>();
if ((r > l) && (l >= 1) && (r <= 100000))
{
int tmp = l % 2 == 0 ? l + 1 : l;
for (int i = tmp; i < r; i += 2)
{
list1.Add(i);
}
}
return list1;
}
添加回答
举报