论一道编程面试题解法
前言
今天面试的时候,面试官出了一道需手写的编程题。一个集合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); } }
每一次被虐都是打怪升级的过程