leetcode1. 两数之和

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;
    }

解题思路: 使用递归思想遍历所有数字,得出结果后返回

  1. 创建一个返回类型为布尔值的方法,传入nums(数组)、target(需要得到的值)、list(用来存储结果的容器)、size(指针的位置)、issum(是否找到结果)。
  2. 使用if语句判断size的值是否小于等于nums的长度,如果不符合,不做处理
  3. 根据nums的长度进行for循环操作,使用if语句判断size和i是否一致,一致代表所选择的数字相同,不做处理;不相同就判断target是否等于nums[size]+nums[i],如果等于就size和i存入list中,并且把issum设置为true;不相同不做处理。
  4. for循环结束后判断issum,如果不为true,使用再次调用checknum方法,除了把size+1,其余的值和第一次调用相同,issum等于调用方法返回的布尔类型。
  5. 返回布尔类型。
  6. 在最开始的方法中判断issum:为true表示找到了对应的值,遍历list取出对应角标放入新建的数组返回即可;为false表示未找到,返回数组[0,0]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值