1. 程式人生 > >全排列(去重)

全排列(去重)

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define maxn 1005

using namespace std;
char s[maxn],ans[maxn];
bool book[maxn];
int len,total;
void dfs(int step)
{
	if(step==len)
	{
		cout << ans << endl;
		total++;
		return ;
	}
	for(int i=0;i<len;i++)
	{
		if(book[i]==false)
		{
			int j;
			for(j=i+1;j<len;j++)
			{
				if(book[j]==true&&s[i]==s[j])//如果兩字元相同,且位置靠後的已經在前面,則有重複,不符合
					break;
			}
			if(j==len)
			{
				book[i]=true;
				ans[step]=s[i];
				dfs(step+1);
				book[i]=false;
			}
		}
	}
}
int main() 
{
	cin>>s;
	len=strlen(s);
	sort(s,s+len);
	memset(book,false,sizeof(book));
	dfs(0);
	cout << total << endl;
    return 0;
}

相關推薦

排列

#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #

習題2.8 輸出排列20 分浙大版《數據結構第2版》題目集

text ble 存在 base scripts html 數據 ext 運行時 請編寫程序輸出前n個正整數的全排列(n<10),並通過9個測試用例(即n從1到9)觀察n逐步增大時程序的運行時間。 輸入格式: 輸入給出正整數n(<10)。 輸出格

算法9-----輸出排列遞歸

inpu 遞歸 col acc end return item AC urn 1、題目:給定一個字符串,輸出所有的字典序。 如: 輸入字符串:‘ac‘,輸出:[‘ac‘,‘ca‘] 輸入字符串:‘abc‘ ,輸出:[‘abc‘,‘acb‘,‘bac‘,‘bca‘,‘cab‘

演算法--排列排列以及非遞迴實現

問題1: 給定字串1234無重複字元,求其所有排列 遞迴方式求解: def swap(num, i, j): tmp = num[i] num[i] = num[j] num[j] = tmp #num無重複數字 def fullSort(num, index)

遞迴:排列實力蒙

#include <iostream> using namespace std; void swap(int &a,int &b) {  int temp=a;   a=b;   b=temp; } void pai_xu(int a[]

distinct

在表中,可能會包含重複值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。關鍵詞 distinct用於返回唯一不同的值。 表A: 表B: 1.作用於單列 select distinct name from A 執行後結果如下:

leetcode:排列java回溯

package LeetCode; import java.util.ArrayList; import java.util.List; /* 給定一個沒有重複數字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1

List object[] 判斷是否有重複資料

方法1 List<Object[]> list2 = new ArrayList<Object[]>(); Map map = new HashMap<String, Ob

leetcode三數之和等於0

題目: 給定一個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。 注意:答案中不可以包含重複的三元組。 例如, 給定陣列 nums = [-1, 0, 1, 2,

PTA 7-2 輸出排列20 分

7-2 輸出全排列(20 分)請編寫程式輸出前n個正整數的全排列(n<10),並通過9個測試用例(即n從1到9)觀察n逐步增大時程式的執行時間。輸入格式:輸入給出正整數n(<10)。 輸出格式:輸出1到n的全排列。每種排列佔一行,數字間無空格。排列的輸出順序為字典

如何優雅的將多個數組合併成一個數組

思考如何寫一個方法將傳遞過來的多個未知個數的數組合併成一個數組並去除陣列中的重複項? 這裡會用到ES5的concat()方法和apply()方法,基礎的for迴圈方法這裡不進行闡述。 concat(arr1,arr2)方法接受多個數組元素,並將arr2中

劍指Offer.38 字串排列包含重複

題目給定字串“abca”輸出其全部排列。分析:package 劍指Offer; import java.util.ArrayList; import java.util.List; public c

演算法學習——搜尋和C++ STL 實現排列排列

全排列搜尋實現#include <iostream> #include <memory.h> using namespace std; int a[10001]; int b[1

輸出排列20 分

請編寫程式輸出前n個正整數的全排列(n<10),並通過9個測試用例(即n從1到9)觀察n逐步增大時程式的執行時間。 輸入格式: 輸入給出正整數n(<10)。 輸出格式: 輸出1到n的全

7-2 輸出排列20 分

7-2 輸出全排列(20 分) 請編寫程式輸出前n個正整數的全排列(n<10),並通過9個測試用例(即n從1到9)觀察n逐步增大時程式的執行時間。 輸入格式: 輸入給出正整數n(<

Mysql統計時間段內的使用者

SELECT b.* FROM vip_report_vip_income b INNER JOIN (SELECT * FROM (SELECT a.* FROM vip_report_vip_income a WHERE 1 = 1 AND a.

set集合

set的新增資料方法有二, 區別: add() 方法會將整個資料作為一項加入,而 update() 會將整個資料切分成單個字元逐一新增進 set() 集合 1、呼叫 update() 方法 >>> b=set() >>> b.upda

7-14 輸出排列20 分

請編寫程式輸出前n個正整數的全排列(0),並通過9個測試用例(即n從1到9)觀察n逐步增大時程式的執行時間。 輸入格式: 輸入給出正整數n(<)。 輸出格式: 輸出1到n的全排列。每種排列佔一行,數字間無空格。排列的輸出順序為字典序,即序列a​1​​,a​

MapReduce實現資料清洗

上面是資料的格式 特徵碼#路徑(路徑裡面包括身份證號和姓名),我通過身份證號進行去重。 Map程式 public static class DistinctMaper extends Mapper<LongWritable, Text, Text, PeopleBe

演算法基礎:排列組合問題-排列Golang實現

【排列組合問題】 一共N輛火車(0<N<10),每輛火車以數字1-9編號,要求以字典序排序輸出火車出站的序列號。 輸入: 包括N個正整數(0<N<10),範圍為1到9,數字之間用空格分割,字串首位不包含空格。 輸出: 輸出以字典