public int[] twoSum(int[] nums, int target) {
List<Integer> list = new ArrayList<>();
Boolean issum = checknum(nums, target, list, 0, false);
if (issum) {
int[] result = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
} else {
return new int[]{0, 0};
}
}
private static Boolean checknum(int[] nums, int target, List<Integer> list, int size, Boolean issum) {
if (size <= nums.length - 1) {//添加条件,防止重复计算
for (int i = 1; i < nums.length; i++) {
if (size != i) {//size和i不能相同,避免重复计算
if (target == nums[size] + nums[i]) {
list.add(size);
list.add(i);
issum = true;
break;
}
}
}
if (!issum) {
issum = checknum(nums, target, list, size + 1, issum);
}
}
return issum;
}
解题思路: 使用递归思想遍历所有数字,得出结果后返回
- 创建一个返回类型为布尔值的方法,传入nums(数组)、target(需要得到的值)、list(用来存储结果的容器)、size(指针的位置)、issum(是否找到结果)。
- 使用if语句判断size的值是否小于等于nums的长度,如果不符合,不做处理
- 根据nums的长度进行for循环操作,使用if语句判断size和i是否一致,一致代表所选择的数字相同,不做处理;不相同就判断target是否等于nums[size]+nums[i],如果等于就size和i存入list中,并且把issum设置为true;不相同不做处理。
- for循环结束后判断issum,如果不为true,使用再次调用checknum方法,除了把size+1,其余的值和第一次调用相同,issum等于调用方法返回的布尔类型。
- 返回布尔类型。
- 在最开始的方法中判断issum:为true表示找到了对应的值,遍历list取出对应角标放入新建的数组返回即可;为false表示未找到,返回数组[0,0]