如果数组2在数组1处包含相同的数字和顺序相同,则为TRUE

时间:2019-02-24 19:02:45

标签: java recursion

例如

Array1={1,2,3,8,9}
Array2={2,8,9}
CO(array1,array2) ----- TRUE
Array1={1,8,5,4,7,6}
Array2={8,1,7} ----- False

我想知道如何通过递归做到这一点

2 个答案:

答案 0 :(得分:0)

您有条件。具有以下内容:

  • 如果Array2为空,则结果为true(基本情况)
  • 如果Array1为空,则结果为false(基本情况)
  • 如果Array1中的第一个元素与Array2中的第一个元素相同,则递归递归,两个参数数组中都没有第一个元素
  • else使用Array1递归而不使用第一个元素,而Array2照原样进行。

这里有优化的可能性。与其创建新的数组,不如使用一个辅助方法,该方法具有2个额外的参数,且当前索引分别为Array1和Array2。逻辑是相同的,但是您可以用两个零来调用它,并且第一个元素始终是该索引,如果索引是长度,则认为Array为空。

答案 1 :(得分:0)

我的一部分不想从您那里得到实现的乐趣。另一部分确实喜欢简单的递归问题。今天另一部分赢了。

这与@Sylwester提供的答案完全相同,但是使用Java而不是英语。

import java.util.Arrays;
import java.util.List;

public class Comparer {

public static void main(String[] args) {
    System.out.println(new Comparer().isOrderedSubset(Arrays.asList(1, 2, 3, 8, 9), Arrays.asList(2, 8, 9)));
    System.out.println(new Comparer().isOrderedSubset(Arrays.asList(1, 8, 5, 4, 7, 6), Arrays.asList(8, 1, 7)));
}

private boolean isOrderedSubset(List<Integer> list1, List<Integer> list2) {
    System.out.println(list1 + " vs " + list2);
    if (list2.isEmpty()) {
        return true;
    }
    if (list1.isEmpty()) {
        return false;
    }
    if (list1.get(0) == list2.get(0)) {
        list1 = list1.subList(1, list1.size());
        list2 = list2.subList(1, list2.size());
    } else {
        list1 = list1.subList(1, list1.size());
    }
    return isOrderedSubset(list1, list2);
}
}