打印给定长度的所有可能的字符串

时间:2019-09-14 01:04:34

标签: java

  

给出一串字母和一个数字k,编写一个函数来打印这些字母的所有长度k的组合。

     

该字符串不包含重复的字母。

     

输入{ 'a', 'b', 'd', 's', 'e' }

     

预期输出abd, abs, abe, ads, ade, bds, bde, bse, dse

我正在使用递归。

基本情况是int k为0时返回前缀。

如果不满足基本要求,则逐步添加字符数组中的所有字符,然后递归调用k = k - 1

// Recursive method used to print all possible strings of length k, given a set of characters.
private static void printAllCombinations(char[] alphabet, String prefix, int n, int k) {
    // Base case: k is 0,
    // print prefix.
    if (k == 0) {
        System.out.print(prefix + " ");
        return;
    }

    // One by one add all characters
    // from set and recursively
    // call for k equals to k - 1.
    for (int i = 0; i < n; i++) {
        // Next character of input added.
        String newPrefix = prefix + alphabet[i];

        // k is decreased, because
        // we have added a new character.
        printAllCombinations(alphabet, newPrefix, n, k - 1);
    }
}

实际输出aaa aab aad aas aae aba abb abd abs abe ada adb add ads ade asa asb asd ass ase aea aeb aed aes aee baa bab bad bas bae bba bbb bbd bbs bbe bda bdb bdd bds bde bsa bsb bsd bss bse bea beb bed bes bee daa dab dad das dae dba dbb dbd dbs dbe dda ddb ddd dds dde dsa dsb dsd dss dse dea deb ded des dee saa sab sad sas sae sba sbb sbd sbs sbe sda sdb sdd sds sde ssa ssb ssd sss sse sea seb sed ses see eaa eab ead eas eae eba ebb ebd ebs ebe eda edb edd eds ede esa esb esd ess ese eea eeb eed ees eee

我可以做些什么来获得所需的输出?

我知道我的函数printAllCombinations实际上正在按预期方式工作。我只是不明白如何实现所需的输出。

1 个答案:

答案 0 :(得分:0)

您可以使用 require_once "Classes/PHPExcel.php"; //create PHPExcel object $excel = new PHPExcel(); //database connection here include_once "db.php"; //insert some data to PHPExcel object $excel->setActiveSheetIndex(0); $query =mysqli_query($mysqli,"select * from student WHERE class='".$class."' "); $row=4; $count=0; while($data=mysqli_fetch_object($query)){ if($count<2) { $excel->getActiveSheet() ->setCellValue('A'.$row , $data->name) ->setCellValue('B'.$row , $class) ->setCellValue('C'.$row , $data->email) ->setCellValue('D'.$row , 'Exam'); } else { } $row++; } $count++; // set column dimension/width $excel->getActiveSheet()->getColumnDimension('A')->setWidth(10); $excel->getActiveSheet()->getColumnDimension('B')->setWidth(20); $excel->getActiveSheet()->getColumnDimension('C')->setWidth(20); //make table headers $excel -> getActiveSheet() ->setCellValue('A1', 'TABLE LISTS/DATA') //this is a title ->setCellValue('A3', 'NAME') ->setCellValue('B3', 'CLASS') ->setCellValue('C3', 'EMAIL') //merging the title $excel->getActiveSheet()->mergeCells('A1:D1'); //aligning $excel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal('center'); //styling $excel->getActiveSheet()->getStyle('A1')->applyFromArray( array( 'font'=>array( 'size'=>24, ) ) ); $excel->getActiveSheet()->getStyle('A3:C3')->applyFromArray( array( 'font'=>array( 'bold'=>true ), 'borders'=>array( 'allborders'=>array( 'style'=> PHPExcel_Style_Border::BORDER_THIN ) ) ) ); //redirect to browser (download) instead of saving the result as a file //this is for MS Office Excel 2007 xlsx format header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header("Content-Disposition: attachment; filename=$class._Resultsheet.xlsx"); //this is for MS Office Excel 2003 xls format //header('Content-Type: application/vnd.ms-excel'); //header('Content-Disposition: attachment; filename="test.xlsx"'); header('Cache-Control: max-age=0'); //write the result to a file //for excel 2007 format $file = PHPExcel_IOFactory::createWriter($excel,'Excel2007'); //for excel 2003 format //$file = PHPExcel_IOFactory::createWriter($excel,'Excel5'); //output to php output instead of filename $file->save('php://output'); ?> ``` 来跟踪阵列n中的当前位置。

alphabets

输出:public static void printAllCombinations(char[] alphabet, int k) { printAllCombinations(alphabet, "", 0, k); } private static void printAllCombinations(char[] alphabet, String prefix, int n, int k) { if (k == 0) { //base case unchanged System.out.print(prefix + " "); return; } for (int i = n; i < alphabet.length; i++) { //loop only from n to end of array String newPrefix = prefix + alphabet[i]; printAllCombinations(alphabet, newPrefix, i + 1, k - 1); } }

如果要在除第一个元素之前的每个元素前添加逗号,则可以将基本情况更改为:

abd abs abe ads ade ase bds bde bse dse

哪个将输出:if (k == 0) { if (n > prefix.length()) { System.out.print(", "); } System.out.print(prefix); return; }