面试题—有重复序列全排列问题
Posted JeemyJohn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题—有重复序列全排列问题相关的知识,希望对你有一定的参考价值。
最近面试遇到个高频面试题:有重复序列全排列问题,现在Java代码展示给大家,原理稍后有空补充。
public class Demo
public static void main(String[] args)
char a1[] = 'a', 'b', 'c';
perm(a1, 0, 3);
System.out.println();
char a2[] = 'a', 'b', 'b', 'c';
perm(a2, 0, 4);
/**
* 判断是否有重复,有重复则在递归的过程中过滤
*/
public static boolean isSwap(char s[], int start, int end)
for (int i = start; i < end; i++)
if (s[i] == s[end])
return false;
return true;
/**
* 交换数组元素
*/
public static void swap(char s[], int i, int j)
char temp = s[i];
s[i] = s[j];
s[j] = temp;
/**
* 递归求全排列
*/
public static void perm(char s[], int start, int end)
if (start == end)
for (int i = 0; i < end; i++)
System.out.print(s[i]);
System.out.println();
else
for (int i = start; i < end; i++)
if (isSwap(s, start, i))
swap(s, i, start);
perm(s, start + 1, end);
swap(s, i, start);
以上是关于面试题—有重复序列全排列问题的主要内容,如果未能解决你的问题,请参考以下文章
《程序员面试金典(第6版)》面试题 08.08. 有重复字符串的排列组合(回溯算法,全排列问题)C++