小米面试题

  1. “一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,
  2.  直到手里没牌,最后桌子上的牌是从第一张到最后一张的排列,梳理牌的排列顺序的算法。”
    例如:
    原数据:1 2 3 4 5
    第一次:3 4 5 2   1
    第二次:5 2 4     3
    第三次:4 2       5
    第四次:2         4

    递归实现
    import java.util.ArrayList;
    import java.util.List;
    
    public class Test {
    
        public static void main(String[] args) {
    
            int n = 5;
            List<Integer> sourceList = new ArrayList<>(16);
            List<Integer> destList = new ArrayList<>(16);
            for (int i = 1; i <= n; i++) {
                sourceList.add(i);
            }
            output(sourceList, destList);
    
            for (Integer num : destList) {
                System.out.println(num);
            }
        }
    
        /**
         * 递归
         *
         * @param sourceList
         * @param destList
         */
        public static void output(List<Integer> sourceList, List<Integer> destList) {
            //1.将第一个数加入到目标list,将原list 第一个数去除
            //2.将新list第1个数去除,并加入到新list末尾
            //3.递归
    
            if (sourceList.isEmpty()){
                return;
            }
            for ( int i = 0; i < 2 ;i++){
                if (0==i){
                    destList.add(sourceList.get(0));
                    sourceList.remove(0);
                }else {
                    if (!sourceList.isEmpty()){
                        int temp = sourceList.get(0);
                        sourceList.remove(0);
                        sourceList.add(temp);
                    }
                }
            }
            output(sourceList,destList);
        }
    }
    

      

      

猜你喜欢

转载自www.cnblogs.com/Andrew520/p/10886643.html