下面我给出了一个方法,给定一个名为num的整数数组,如果1,2,3在数组中,则该方法按连续顺序返回true。这个程序没有问题。然而,for循环中的条件似乎有点重复和乏味。是否有更简单,更有效的方法来解决这个问题? (即某种循环?)
public boolean array123(int[] nums) {
boolean first = false;
for (int i = 0; i <nums.length-2; i++)
{
if (nums[i] == 1)
{
if (nums[i+1] == 2)
{
if (nums[i+2] == 3)
{
first = true;
}
}
}
}
return first;
}
答案 0 :(得分:3)
您可以像这样简化:
public boolean array123(int[] nums) {
for (int i = 0; i <nums.length-2; i++){
if(nums[i] == 1 && nums[i + 1] == 2 && nums[i + 2] == 3) {
return true;
}
}
return false;
}
答案 1 :(得分:1)
像这样的东西可能会做你想要的。在这种特殊情况下,因为你没有做任何复杂的事情,你可以抛弃结果变量,直接返回你想要的答案。主要是偏好问题。
public boolean array123(int[] nums) {
int check = 1;
for(int i = 0; i<nums.length; i++) {
if(nums[i] == check || nums[i] == 1)
{
if(check == 3)
{
return true;
}
check = nums[i]+1;
}
else {
check = 1;
}
}
return false;
}
EDIT 更清洁的解决方案实际上就是这样的
public boolean array123(int[] nums) {
int check = 1;
for(int i = 0; i<nums.length; i++) {
if(nums[i] == check) {
if(check == 3) {
return true;
}
check++;
} else if(check > 1) {
check = 1;
i--;
}
}
return false;
}