全排列(求所有情况的个数)--10--全排列--蓝桥杯凑算式和leetcode46全排列
题目描述
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
输出
输出一个整数表示答案
分析
这是一道典型的全排列算法的应用。将1~9组成的序列全排列出来,再来挑选符合算式结构的情况。
全排列的算法思想理解1:将原序列中的每个位置的数与原序列的该位置后面的每个数进行交换。
1 #include <iostream> 2 #include <vector> 3 #include <stdio.h> 4 #include <queue> 5 #include <cmath> 6 #include <algorithm> 7 using namespace std; 8 typedef long long ll; 9 const int n = 1*2*3*4*5*6*7*8*9+5; 10 vector<double>num[n]; 11 int sum = 0; 12 void perm(vector<double>my,int l,int r){ 13 if(l > r){ 14 num[sum] = my; 15 for(int i = 0;i < 9;i++) 16 cout << my[i] <<" "; 17 cout << endl; 18 sum++; 19 } 20 else{ 21 for(int i = l;i <= r;i++){ 22 swap(my[l],my[i]); 23 perm(my,l + 1,r); 24 swap(my[l],my[i]); 25 } 26 } 27 } 28 int main(){ 29 vector<double>my; 30 double a,b,c,D,E; 31 for(int i = 0;i < 9;i++){ 32 my.push_back(i+1); 33 } 34 perm(my,0,8); 35 cout << sum <<endl; 36 int zz = sum; 37 for(int i = 0;i < zz;i++){ 38 a = num[i][0]; 39 b = num[i][1]; 40 c = num[i][2]; 41 D = num[i][3]*100.0+num[i][4]*10.0+num[i][5]; 42 E = num[i][6]*100.0+num[i][7]*10.0+num[i][8]; 43 44 if(a+(b/c)+(D/E) != 10.0) 45 sum--; 46 } 47 cout << sum <<endl; 48 return 0; 49 } 50 51
全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
Java代码演示
1 class Solution { 2 List<List<Integer>> res = new ArrayList<List<Integer>>(); 3 public void swap(int[] num,int i,int j){ 4 int temp = num[i]; 5 num[i] = num[j]; 6 num[j] = temp; 7 } 8 public void perm(int[] nums,int left,int right){ 9 if(left > right){ 10 List<Integer> list = new ArrayList<Integer>(); 11 for(int i = 0;i < nums.length;i++){ 12 list.add(nums[i]); 13 } 14 res.add(list); 15 } 16 17 for(int i = left;i <= right;i++){ 18 swap(nums,left,i); 19 perm(nums,left+1,right); 20 swap(nums,left,i); 21 } 22 } 23 public List<List<Integer>> permute(int[] nums) { 24 if(nums.length == 0){ 25 List<Integer> list = new ArrayList<Integer>(); 26 res.add(list); 27 return res; 28 } 29 perm(nums,0,nums.length - 1); 30 return res; 31 } 32 }
可以的话,记得帮我点个推荐,然后收藏+关注哟