无重复字符的字符数组的全排列

本文介绍了改进后的全排列算法实现,通过优化代码结构,删除isExist()函数并修改else块,实现对含有重复字符的字符数组进行全排列。详细阐述了核心函数的工作原理及swap函数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题其实和上一篇文章《含重复字符的字符数组的全排列》代码很相似,这是做了一点改进,删除了isExist()函数,并在else块做了修改。

 

代码如下:

public class allArray {
 public static int num = 0;//计数器
 /*
  * Array实现无重复字符的数组的全排列 list是字符数组,i是指示当前位置的游标,length是数组长度
  * 注释:这个函数最核心的地方,我感觉是else块的代码
  */
 public void Array(char list[], int i, int length) {
  if (i == length - 1) {
   for (int j = 0; j < length; j++) {
    num++;
    System.out.print(list[j]);
   }
   System.out.println(num/length);
  } else {
   for (int j = i; j < length; j++) {
    swap(list, i, j);// 交换当前值和当前位置之后的值
    Array(list, i + 1, length);// 当前位置+1,递归
    swap(list, i, j);// 再交换
   }
  }
 }

 

 /*
  * swap实现了数组中两个位置的值的交换 list是字符数组,i,j表示要交换的位置
  */
 public void swap(char list[], int i, int j) {
  char temp = list[i];
  list[i] = list[j];
  list[j] = temp;
 }

 

 public static void main(String[] args) {
  char a[] = { 'a', 'b', 'c', 'd','e','f'};// 以这个字符数组为例
  allArray array = new allArray();
  array.Array(a, 0, a.length);
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值