[演算法學習]Java實現字串全排列
思路:這裡用到遞迴的方式完成字元資料的全排列,遞迴確實很方便。看似沒用到輔助空間,實際上卻是消耗了棧空間(“遞迴棧”),遞迴用起來也不是那麼簡單,解決問題用遞迴的時候,一定要關注到兩個零界點,怎麼開始和怎麼結束。
程式碼
/**
* 問題描述:輸入一個字串,打印出字串的全排列
*
* @author kesar
*
*/
public class AllSeqArrange
{
/**
* test+遞迴
* @param seq
*/
public static void printAllSeq(String seq)
{
if (seq == null || "".equals(seq))
{
return;
}
char[] cs = seq.toCharArray();
printAllSeq(cs, 0, cs.length - 1);
}
/**
* 解法:遞迴。遍歷每個字元交換到第一位,第一位的後面剩下字元進入遞迴,當無剩下字元可以進入遞迴時,列印輸出字元陣列。
* @param cs
* @param start
* @param end
*/
private static void printAllSeq(char[] cs, int start, int end)
{
if (start > end)
{
System.out.println(cs);
return;
}
for (int i = start; i <= end; i++)
{
exch(cs, start, i);
printAllSeq(cs, start + 1, end);
}
}
/**
* 交換字元陣列中的兩個字元
* @param cs
* @param i
* @param j
*/
private static void exch(char[] cs, int i, int j)
{
if (i == j)
{
return;
}
char temp = cs[i];
cs[i] = cs[j];
cs[j] = temp;
}
/**
* @param args
*/
public static void main(String[] args)
{
printAllSeq("abcd");
}
}
輸出
abc
acb
cab
cba
abc
acb
相關推薦
[演算法學習]Java實現字串全排列
思路:這裡用到遞迴的方式完成字元資料的全排列,遞迴確實很方便。看似沒用到輔助空間,實際上卻是消耗了棧空間(“遞迴棧”),遞迴用起來也不是那麼簡單,解決問題用遞迴的時候,一定要關注到兩個零界點,怎麼
【前端筆試】JavaScript實現字串全排列
我個人認為前端工程師筆試題中,演算法題一般不難,也就這個難度,甚至比這還要簡單。這是我在筆試過程中遇到的一個題~下面分享一下解題思路。 大體結構:定義一個方法,傳入str變數,返回一個數組,包含所有排列: function fun(str){ v
字串全排列演算法java實現
字串的全排列 遞迴方法實現要實現字串全排列 我覺得像是一種分治法的感覺。比如AB只有兩種 :AB BA到了ABC時可以抽出A 只看BC的話就是兩種,然後BC全排列之後放在A後面。隨後取出B對AC全排列放在B後面以此類推,此演算法非常精美 但是位數多了全排列數量會呈指數式增長。
Java實現字串的全排列總結
在劍指offer上刷題時遇到的題目: 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 本部落格參考:
字串全排列與全組合的遞迴實現-Java版
排列組合演算法用途廣泛, 需要掌握, 為降低門檻, 本文主要關注演算法的邏輯和簡易性, 未重視演算法效率. 結合網路書本上的實現和自己的需求, 這裡列有四個目標: 1. 所有元素的全排列: ab的全排列是ab, ba(順序相關); 2. 所有元素的全組合:
面試演算法學習-4-字串全排列
題目描述 輸入一個字串,打印出該字串中字元的所有排列。 例如輸入字串abc,則輸出由字元a、b、c 所能排列出來的所有字串 abc、acb、bac、bca、cab 和 cba。 分析與解法 解法一、遞迴實現 從集合中依次選出每一個元素,作為排列的第一個元素,然後對剩餘的元素
從零開始學習演算法(Java實現)~~~~之字串篇~~~判斷兩個字串是否是顛倒字母順序構成的
從今天開始記錄一下學習演算法的例程,貴在堅持! 寫出一個函式 anagram(s, t) 去判斷兩個字串是否是顛倒字母順序構成的 樣例 給出 s="abcd",t="dcab",返回 true 難都係數* 以下是java程式碼實現: public class So
字串全排列 Java遞迴實現
思路: 字串的全排列和數字的全排列類似,舉個例子:字串為“ABC”,按照我們所學數學上的邏輯,先取出A,放入首位,剩下BC有兩種全排列情況,即ABC,ACB,同理,將A分別與B,C交換,於是字串"ABC"的全排列總共有6種。如何將這種邏輯轉換為程式碼:首先,可以肯定
全排列演算法(java實現)
100題目之53題目和70題目 在做100題目的時候,全排列的演算法困擾了很久,雖然網上了搜了一些資料,可是並沒有搞懂。今天花了一個下午的時間,從新梳理了一遍,終於弄明白了。 全排列的演算法,遞迴分析網上都有: 設一組數p = {r1, r2, r3, ... ,
java實現有條件字串全排列輸出
package edu.pku.ss.hlj; public class Hlj { public static void main(String[] args) { String s = "abcd";//這裡是要用到的所有陣列成的一個字串,其它字元同樣適
java字串全排列的實現方式
今天突然之間想起了自己來易查面試時的一個筆試題目,題目大致如下:求字串s的全排列。 其實這個題目的實現方式也就是遞迴呼叫,當時也就寫了一下虛擬碼,今天就把完整的實現方式和大家分享下。 下面的實現方式也存在一些小BUG,比如:對於字串中出現相同的字元
深度優先演算法實現字母全排列(Java)
使用Java實現對任意字母的全排列,例如: 在字母ABC中排列出全部答案。使用一般的for迴圈方法也可以解出題目,這裡面就ABC三個字母,使用for迴圈的話也只不過三個迴圈巢狀罷了,如果是ABCDEF
字串全排列(效能分析Java版)
具體的思路我就不寫了,借用網上的一張圖來表示: 我的程式碼如下: import java.util.*; public class Solution { public ArrayList<String> Permutation(String str
【LeetCode-面試演算法經典-Java實現】【151-Reverse Words in a String(反轉字串中的單詞)】
原題 Given an input string, reverse the string word by word. For example, Given s = "the sky is blue", return "bl
【LeetCode-面試演算法經典-Java實現】【003-Longest Substring Without Repeating Characters(最長非重複子字串)】
原題 Given a string, find the length of the longest substring without repeating characters. For
java字串全排列問題(經典)
*原題如下:用1、2、2、3、4、6這六個數字,用java寫一個main函式,打印出所有不同的排列, *如:612234、412346等,要求:”4”不能在第三位,”3”與”6”不能相連. * *1把問題歸結為圖結構的遍歷問題。實際上6個數字就是六個結點,
java筆試題:用java實現字串壓縮演算法
題目:將字串 aaabcdda (可以從控制檯接收)程式設計實現將其轉換為 3a1b1c2d1a。 我的大致就這樣: System.out.print("請輸入一串字串:"); Scanner s = new Scanner(System.in); String str
js實現字元全排列演算法
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>字元全排列</title> </head> <body>
演算法-字串全排列問題
轉載地址:http://blog.csdn.net/hackbuteer1/article/details/7462447 全排列在筆試面試中很熱門,因為它難度適中,既可以考察遞迴實現,又能進一步考察非遞迴的實現,便於區分出考生的水平。所以在百度和迅雷的校園招聘以及程式設
機器學習入門演算法及其java實現-ID3(決策樹)演算法
ID3決策樹也是決策樹的一種,其作用在於根據已有資料訓練決策樹,並通過決策樹的分支實現對新資料的分類,是一種有監督的學習。 在生成決策樹的過程中,ID3使用的資訊熵增益對子節點類別進行確定。根據資訊熵越是有序的資料熵值越低,資訊熵增益越大表示當前屬性對於資料的