(Java实现) 洛谷 P1691 有重复元素的排列问题
2024-09-07 02:59:01
题目描述
设R={r1,r2,……,rn}是要进行排列的n个元素。其中元素r1,r2,……,rn可能相同。使设计一个算法,列出R的所有不同排列。
给定n以及待排列的n个元素。计算出这n个元素的所有不同排列。
输入输出格式
输入格式:
第1行:元素个数n(1<=n<500)
第2行:一行字符串,待排列的n个元素
输出格式:
计算出的n个元素的所有不同排列,最后一行是排列总数。
输入输出样例
输入样例#1:
4
aacc
输出样例#1:
aacc
acac
acca
caac
caca
ccaa
6
说明
输出按字典顺序排
import java.util.Scanner;
public class youchongfuyuansudepailiewenti {
public static int[] f;
public static int[] a;
public static char[] str;
public static int count=0,n=0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
String s = sc.next();
sc.close();
f = new int[27];
a = new int[501];
str = s.toCharArray();
for (int i = 0; i < n; i++) {
f[str[i] - 96]++;
}
dfs(1);
System.out.println(count);
}
public static void dfs(int step){
if (step==n+1) {
count++;
for (int i = 1; i <= n; i++) {
System.out.print((char)(a[i]+96));
}
System.out.println();
return;
}
for (int i = 1; i <=26; i++) {
if(f[i]>0){
a[step]=i;
f[i]--;
dfs(step+1);
f[i]++;
}
}
}
}
最新文章
- POJ 2251 Dungeon Master(3D迷宫 bfs)
- 转: Delphi的OverRide、OverLoad和Virtual方法
- JAVA源码走读(二)二分查找与Arrays类
- Linux系统中配置jdk
- 快速入门系列--NOSQL--07MongoDB
- SqlServerException:拒绝对表对象的select,insert权限解决(新建账号导致的问题)
- iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver
- IIS不定期Crash和Oracle“未处理的内部错误(-2)”的问题分析
- BCP command usage in SQL Server
- 解决从linux本地文件系统上传文件到HDFS时的权限问题
- SSO之CAS备忘
- Xcode简易基础篇,以新手角度去操作
- 一道C语言面试题:写一个宏,将16位的整数转为Big Endian
- mysql--学生课程成绩表
- 调整分区大小(ext2\ext3\ext4)
- [HNOI 2014]江南乐
- Mac破解免费office软件
- python框架之Django(8)-CBV中添加装饰器
- 论文阅读笔记:【Transforming Auto-encoders】
- googletest基本测试宏