zoukankan      html  css  js  c++  java
  • 全排列问题

    给定整数n,依次输出1,2,3,……直到n位最大整数。

    比如n=2,输出应该是:1,2,3,……,98,99

    这道题中如果ntebie大,则不能使用数字来表示,因为可能会溢出。因此需要使用数组来表示。

    当n=2时,用数组array={0,0}来表示可能的值。则array可能的情况有{0,0},{0,1},{0,2},……,{0,9},……{9,9}

    可以看出这是一个全排列问题。

    数组的每一位都有10种情况{0,1,2,3,4,5,6,7,8,9}。因此我们使用递归来做全排列。

    代码:

    /**
     * Created by wuchao on 17-3-29.
     */
    import java.util.*;
    public class test {
        public static void main(String[] args) {
            printN(3);
        }
        public static void printN(int n){
            char[] array = new char[n];
            //初始化
            for(int i=0;i<n;i++){
                array[i]='0';
            }
            for(int i=0;i<10;i++){
                array[0]= (char)('0'+i);
                printNRecu(array,0);
            }
        }
        public static void printNRecu(char[] array,int index){
            //最后一位已经赋值后,打印该数组
            if(index==array.length-1){
                printArray(array);
                return;
            }
            //递归修改下一个元素
            for(int i=0;i<10;i++){
                array[index+1]=(char)('0'+i);
                printNRecu(array,index+1);
            }
        }
        //打印数组,从第一个非0开始打印,因为整数的第一位非零
        public static void printArray(char[] array){
            int index=0;
            for(;index<array.length;index++){
                if(array[index]!='0') break;
            }
            if(index==array.length) return;
    
            for(int i=index;i<array.length;i++) {
                System.out.print(array[i]);
            }
            System.out.println();
        }
    }
    
  • 相关阅读:
    又见回文 字符串
    学密码学一定得学程序 KMP
    学密码学一定得学程序 KMP
    KMP简单应用
    KMP简单应用
    用ALAssetsLibrary将过滤后图片写入照片库
    iOS 8版本信息与屏幕尺寸
    屏幕适配的那些坑
    从工程中删除Cocoapods
    AVCaptureSession 照相时获取 AVCaptureVideoPreviewLayer尺寸
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/6693604.html
Copyright © 2011-2022 走看看