您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

【Java蓝桥杯 全排列模板使用】

蓝桥杯 全排列使用

  • 1.全排列 交换回溯法
  • 2.全排列 前缀法

  • 全排列模板-数组 2013年 第四届 蓝桥杯【带分数】
  • 全排列模板-字符数组 2014年 第五届 蓝桥杯【扑克排序】
  • 全排列模板-无重复元素 2016年 第七届 蓝桥杯【凑算式】

1.全排列 交换回溯法

无字典排序

	public static void main(String[] args) {
		int a[]= {1,2,3};
		f(a,0);
	}

	private static void f(int[] a, int k) {
		if (k==a.length) {
			for (int x:a) {
				System.out.print(x);
			}
			System.out.println();
		}else {
			for (int i = k; i < a.length; i++) {
				int t=a[i];
				a[i]=a[k];
				a[k]=t;
				f(a, k+1);
				t=a[i];
				a[i]=a[k];
				a[k]=t;
			}
		}
		
	}

2.全排列 前缀法

有字典排序

	public static void main(String[] args) {
		String string = "123";
		f("", string.toCharArray());

	}
	private static void f(String k, char[] arr) {
		if (k.length() == arr.length) {
			System.out.println(k);
		}
		for (int i = 0; i < arr.length; i++) {
			char ch = arr[i];
			// 理解点:这个字符可用:在k中出现的次数<在字符集出现的次数
			if (counts(k, ch) < counts(arr, ch)) {
				f(k + ch, arr);
			}
		}
	}

	static int counts(char[] arr, char ch) {
		int sum = 0;
		for (char c : arr) {
			if (c == ch) {
				sum++;
			}
		}
		return sum;
	}

	static int counts(String s, char ch) {
		int sum = 0;
		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i) == ch)
				sum++;
		}
		return sum;
	}

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进