零基础学Python———求一个字符串的每个字符重新组合排列python排列组合的数学运算(递归法)

news/2024/11/15 20:01:33/

1、数学知识温习

全排列的公式为:
A n m ; A _n^m ; Anm
以 " AABBCC ” 为例,全排列的公式有:
A 6 6 = 6 ! ; A _6^6 = 6! ; A66=6
重复的字母为 “ ABC ” ,各重复2个,故重复的次数为:
A 2 2 ∗ A 2 2 ∗ A 2 2 ; A _2^2 * A _2^2 * A _2^2 ; A22A22A22
所以,所有不同的排列数有:
S n = A 6 6 A 2 2 ∗ A 2 2 ∗ A 2 2 = 720 8 = 90 ; S _n = \frac{A _6^6 }{A _2^2 * A _2^2 * A _2^2} = \frac{720 }{8} =90; Sn=A22A22A22A66=8720=90

2、python使用递归法求所有的重排列项次和数目

# 传入需要排列的字符串,返回字符串所有的排列列表,包含重复的,使用递归法
def di_gui(str1):if len(str1) <= 1:return str1list1 = []for i in range(len(str1)):for j in di_gui(str1[0:i] + str1[i+1:]):list1.append(str1[i] + j)return list1# 列表去重===========
def qu_chong(l1):l2 = []for i in l1:if i not in l2:l2.append(i)return l2if __name__ == '__main__':str1 = "AABBCC"list1 = di_gui(str1)print(len(list1), list1)  # 输出全排列的列表个数和项次,包含重复的~list2 = qu_chong(list1)   # 去重print(len(list2), list2)  # 输出全排列的列表个数和项次,不包含重复的~

输出的结果为:在这里插入图片描述

3、Python使用数学公式计算全排列项次,不能输出有哪些项次,只能算出总数

from collections import Counter     # 导入计数模块
from math import factorial          # 导入阶乘模块if __name__ == '__main__':str1 = "AABBCC"a = 1num1 = Counter(str1)print(num1)for i in num1.values():a *= factorial(i)print(factorial(len(str1)))print(a)print("阶乘结果:", factorial(len(str1))//a)

输出的结果为:
在这里插入图片描述


http://www.ppmy.cn/news/174787.html

相关文章

adb 常用命令

adb 常用命令 # adb 帮助 adb --help# 启动adb 服务 adb start-server# 关闭adb服务 adb kill-server# 获取设备号 adb devices # 获取系统版本号 adb shell getprop ro.build.version.release # 发送PC文件到手机端 adb push C:\Users\XXX\Desktop\xx.png /sdcard# 手…

CSS中改变超链接的长宽

关键词&#xff1a;display: block; eg. 我希望改变下图按钮链接的背景颜色&#xff0c;当鼠标悬浮时&#xff08;&#xff1a;hover&#xff09;文本颜色为白色&#xff0c;背景颜色为红色。&#xff08;图1的home按钮变为图2&#xff09; 图一 图二 HTML <li><a…

android apk的sepolicy domain是如何指定的呢

1 ps -AZ 可以看到对应进程的sepolicy domain信息 如下面的 platform_app gmscore_app priv_app mediashell_app u:r:platform_app:s0:c512,c768 u0_a66 954 383 1109868 51060 do_epoll_wait 0 S com.android.systemuiu:r:gmscore_app:s0:c512,c768 u0…

Linux手动配置虚拟机网络的两种方式

nmcli 命令的方式 在我们的ens160网卡上添加ip地址、网关、dns、获取IP方式改为静态、最后connection.autoconnect 设为yes 我们在添加ip时注意添加我们的网段 dns可以是114.114.114.114或者8.8.8.8都可以 [rootredhat ~]# nmcli connection modify ens160 ipv4.addresses 19…

vue3.0+vite+router搭建项目(三):配置vite.config.js

前言&#xff1a;上一篇文章中&#xff0c;我们已经讲解了项目搭建的方法以及过程总出现bug的解决方法。这篇文章主要讲解一下配置。 一、vite 配置别名 使用编辑器打开搭建号的项目 进入配置文件 vite.config.js。 import { defineConfig } from viteimport vue from vitejs…

6---6

#include<stdio.h>int main(void) {int number;printf("Please enter a number:");scanf_s("%d", &number);for (int i 2; i * i < number; i){if ((i * i) % 2 0){printf("%d\n", i * i);}}return 0; }

【概率论基础进阶】随机事件和概率-古典概型与伯努利概型

文章目录 一、古典概型二、几何概型三、伯努利概型 一、古典概型 定义&#xff1a;当试验结果为有限 n n n个样本点&#xff0c;且每个样本点的发生具有相等的可能性&#xff0c;如果事件 A A A由 n A n_{A} nA​个样本点组成&#xff0c;则事件 A A A的概率 P ( A ) n A n …

Oracle 自带性能诊断工具介绍

statspack Oracle Statspack 工具从 Oracle 8.1.6 开始引入&#xff0c;通过 Statspack 可以很容易地收集数据库性能数据&#xff0c;并通过这些数据进而分析确定 Oracle 数据库的瓶颈所在。该工具9i 必用,10g,11g,12c 兼容&#xff0c;后期awr出来后&#xff0c;Oracle 建议…