论一道编程面试题解法

前言

今天面试的时候,面试官出了一道需手写的编程题。一个集合List<Integer> ,存储的值在(0~100),求所有的x+y=100的组合。并打印出来。题目不难,平时面向IDE编程,且当时时间比较紧急,当时没有写好。在家调试,写了两种解法,如下。(一个非递归,一个递归)测试通过

解法

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

/**
 * @author LWX-PC
 * @version 1.0
 * @class Main
 * @date 2019/8/29 19:03
 * @description
 */
public class Main {
    public static void main(String[] args) {
        Integer[] arr=new Integer[]{0,22,100,67,1,99,1,99,55,66,45};
        System.out.println(Arrays.toString(arr));
//printNum(Arrays.asList(arr));
        printNum2(new ArrayList<Integer>(Arrays.asList(arr)));
    }

    public static void printNum(List<Integer> list){
        List<Integer> indexs=new ArrayList<>();
       out:for(int i=0,length=list.size();i<length-1;i++){
            if(!indexs.contains(i)){
                int temp=list.get(i);
                for(int j=i+1;j<length;j++){
                    if(!indexs.contains(j)){
                        int temp2=list.get(j);
                        if((temp+temp2)==100){
                            indexs.add(i);
                            indexs.add(j);
                            System.out.println(indexs);
                            System.out.println(temp + "+" + temp2 + "=100");
                            continue out;
                        }
                    }
                }
            }
        }
    }


    public static  void printNum2(List<Integer> list){
        boolean flag=false;
        if(list.size()>=2){
            out:for(int i=0,length=list.size();i<length-1;i++){
                int temp=list.get(i);
                for(int j=i+1;j<length;j++){
                    int temp2=list.get(j);
                    if((temp+temp2)==100){
                        System.out.println(temp + "+" + temp2 + "=100");
                        list.remove(i);
                        list.remove(j-1);
                        flag=true;
                        break out;
                    }
                }
                if(!flag){
                    list.remove(i);
                    break out;
                }
            }
            printNum2(list);
        }
    }

 

 每一次被虐都是打怪升级的过程

原文地址:https://www.cnblogs.com/geduocoding/p/11431794.html