给定一个字符串,返回所有的可能组合
例:abc
返回a,b,c,ab,ac,bc,ca,cb,abc,acb,bac,bca,cab,cba
回复内容:
例:abc
返回a,b,c,ab,ac,bc,ca,cb,abc,acb,bac,bca,cab,cba
我覺得這個問題相當有趣,做為一個 Python 狂熱者,我不能同意 @garry_qian 的答案更多了,既然 Python 都提供了那麼好用的標準庫,不使用一下實在是太可惜了,在此立場下,一個 簡潔,簡短 (好啦並沒有...),但邏輯上基本相同的做法如下:
<code>>>> s = 'abc' >>> results = sorted([''.join(c) for l in range(len(s)) for c in permutations(s, l+1)]) ['a', 'b', 'c', 'ab', 'ac', 'ba', 'bc', 'ca', 'cb', 'abc', 'acb', 'bac', 'bca', 'cab', 'cba']</code>
這個寫法沒什麼特別的,不過是使用兩個 for
的 list comprehension 罷了。
同時,它回傳的是一個 string 的 list,與原題目比較接近。
但是這激發了我的一些好奇心,想自己來寫寫看,同時以沒有這些排列組合工具的他種語言來說,也許比較容易利用相同的邏輯來完成。
首先我完成的是關於組合的 function,他代入一個字串並且回傳所有長度的所有字元組合,但不排列:
<code>def get_combinations(string): combs = [] for i in range(1, 2**len(string)): pat = "{0:b}".format(i).zfill(len(string)) combs.append(''.join(c for c, b in zip(string, pat) if int(b))) return combs</code>
測試:
<code>>>> print get_combinations('abc') ['c', 'b', 'bc', 'a', 'ac', 'ab', 'abc']</code>
一如預期,我們拿到:
長度為 1 的
'c', 'b', 'a'
長度為 2 的
'bc', 'ac', 'ab'
長度為 3 的
'abc'
果然是各種長度下的所有組合都到手了。
這個寫法肯定不是最好的,但我覺得想法滿有趣的。想法就是,要考慮 'abc'
的所有組合,那不就是分別考慮 a
要不要取,b
要不要取 和 c
要不要取,於是總共 2*2*2 = 8
(2**len(string)
) 種組合,那不就正好對應到:
<code>000 -> 都不取 001 -> 只取 c 010 -> 只取 b 011 -> 取 b c 100 -> 只取 a 101 -> 取 a c 110 -> 取 a b 111 -> 都取</code>
所以在 get_combinations
中,用了一點技巧去生出從 1 到 7 的二進位碼,再根據 0 與 1 決定每一種組合該取用那些字元。
這還沒完成任務,我們距離標準答案,還必須取得:
每一種 組合 的所有 排列 情形
這產生了 get_permutations
這個 function:
<code>def get_permutations(clst): if len(clst)==1: return [clst[0]] results = [] for idx, c in enumerate(clst): results += [c+substr for substr in get_permutations(clst[:idx] + clst[idx+1:])] return results</code>
測試:
<code>>>> print get_permutations('abc') ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']</code>
邏輯很簡單,用 recursive 的方式去找出 固定長度字元組合
所有的排列。
有了以上兩種 function,我們就可以求出答案囉:
<code>>>> [perm for comb in get_combinations('abc') for perm in get_permutations(list(comb))] ['c', 'b', 'bc', 'cb', 'a', 'ac', 'ca', 'ab', 'ba', 'abc', 'acb', 'bac', 'bca', 'cab', 'cba']</code>
結論:
別重複發明輪胎,這不但累死你,還很顯笨
人生苦短,我用 Python
<code>import itertools chrs = 'abc' for i in range(len(chrs)): for combination in itertools.permutations(chrs, i + 1): print combination</code>
既然同时打了 php
和 python
标签,那就用两种方式都写下吧,逻辑用的一样的。
php
代码
function addChar($strs, $chars) { $result = []; foreach ($strs as $str) { foreach ($chars as $char) { $result[] = $str . $char; } } return $result; } $chars = ['a', 'b', 'c']; $group = []; $count = count($chars); for ($i = 1; $i <= $count; $i++) { if ($i == 1) { $group[$i] = addChar([''], $chars); } else { $group[$i] = addChar($group[$i - 1], $chars); } } // 合并数组 $result = call_user_func_array('array_merge', $group); var_dump($group);
python
代码
# encoding:utf-8 def addChar(strs, chars): result = [] for str in strs: for char in chars: result.append(str + char) return result chars = ['a', 'b', 'c'] group = {} count = len(chars) for i in xrange(1, count + 1): if i == 1: group[i] = addChar([''], chars) else: group[i] = addChar(group[i - 1], chars) # 合并数组 result = [] for i in group: result += group[i] print result
<code>result = [] def function(arg, string): global result if len(arg) >= len(string): return None for alphabet in string: if alphabet in arg: continue function(arg+alphabet, string) result.append(arg+alphabet) string = 'abc' for alphabet in string: result.append(alphabet) function(alphabet, string) print list(set(result))</code>
python2.7,和@garry_qian 相同,写完才发现有了,其他楼的python方案我都懒得看了
# coding: utf-8 import itertools as t li = ['a', 'b', 'c'] tmp = [] for n in range(1, len(li) + 1): x = t.permutations(li, n) for i in x: tmp.append(''.join(i)) print tmp
P(2,3)
P(3,3)
12种可能性
假设字符串的长度为2, 那所有的组合就是: 2! + 2! / 1! = 4
假设字符串的长度为3, 那所有的组合就是: 3! + 3! / 1! + 3! / 2! = 15
假设字符串的长度为4, 那所有的组合就是: 4! + 4! / 1! + 4! / 2! + 4! / 3! = 64
这个公式可以进行推广
n! + n! / 1! + n! / 2! + ... + n! / (n-1)!
代码就不贴了

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

MySQL a une version communautaire gratuite et une version d'entreprise payante. La version communautaire peut être utilisée et modifiée gratuitement, mais le support est limité et convient aux applications avec des exigences de stabilité faibles et des capacités techniques solides. L'Enterprise Edition fournit une prise en charge commerciale complète pour les applications qui nécessitent une base de données stable, fiable et haute performance et disposées à payer pour le soutien. Les facteurs pris en compte lors du choix d'une version comprennent la criticité des applications, la budgétisation et les compétences techniques. Il n'y a pas d'option parfaite, seulement l'option la plus appropriée, et vous devez choisir soigneusement en fonction de la situation spécifique.

MySQL peut s'exécuter sans connexions réseau pour le stockage et la gestion des données de base. Cependant, la connexion réseau est requise pour l'interaction avec d'autres systèmes, l'accès à distance ou l'utilisation de fonctionnalités avancées telles que la réplication et le clustering. De plus, les mesures de sécurité (telles que les pare-feu), l'optimisation des performances (choisissez la bonne connexion réseau) et la sauvegarde des données sont essentielles pour se connecter à Internet.

Guide d'optimisation des performances de la base de données MySQL dans les applications à forte intensité de ressources, la base de données MySQL joue un rôle crucial et est responsable de la gestion des transactions massives. Cependant, à mesure que l'échelle de l'application se développe, les goulots d'étranglement des performances de la base de données deviennent souvent une contrainte. Cet article explorera une série de stratégies efficaces d'optimisation des performances MySQL pour garantir que votre application reste efficace et réactive dans des charges élevées. Nous combinerons des cas réels pour expliquer les technologies clés approfondies telles que l'indexation, l'optimisation des requêtes, la conception de la base de données et la mise en cache. 1. La conception de l'architecture de la base de données et l'architecture optimisée de la base de données sont la pierre angulaire de l'optimisation des performances MySQL. Voici quelques principes de base: sélectionner le bon type de données et sélectionner le plus petit type de données qui répond aux besoins peut non seulement économiser un espace de stockage, mais également améliorer la vitesse de traitement des données.

Il est impossible de visualiser le mot de passe MongoDB directement via NAVICAT car il est stocké sous forme de valeurs de hachage. Comment récupérer les mots de passe perdus: 1. Réinitialiser les mots de passe; 2. Vérifiez les fichiers de configuration (peut contenir des valeurs de hachage); 3. Vérifiez les codes (May Code Hardcode).

Pour les environnements de production, un serveur est généralement nécessaire pour exécuter MySQL, pour des raisons, notamment les performances, la fiabilité, la sécurité et l'évolutivité. Les serveurs ont généralement un matériel plus puissant, des configurations redondantes et des mesures de sécurité plus strictes. Pour les petites applications à faible charge, MySQL peut être exécutée sur des machines locales, mais la consommation de ressources, les risques de sécurité et les coûts de maintenance doivent être soigneusement pris en considération. Pour une plus grande fiabilité et sécurité, MySQL doit être déployé sur le cloud ou d'autres serveurs. Le choix de la configuration du serveur approprié nécessite une évaluation en fonction de la charge d'application et du volume de données.

HaDIDB: Une base de données Python évolutive de haut niveau légère HaDIDB (HaDIDB) est une base de données légère écrite en Python, avec un niveau élevé d'évolutivité. Installez HaDIDB à l'aide de l'installation PIP: PiPinStallHaDIDB User Management Créer un utilisateur: CreateUser () pour créer un nouvel utilisateur. La méthode Authentication () authentifie l'identité de l'utilisateur. FromHadidb.OperationMportUserUser_OBJ = User ("Admin", "Admin") User_OBJ.

Le stockage d'images dans une base de données MySQL est possible, mais pas la meilleure pratique. MySQL utilise le type BLOB lors du stockage d'images, mais il peut provoquer une gonflement du volume de la base de données, une vitesse de requête et des sauvegardes complexes. Une meilleure solution consiste à stocker des images sur un système de fichiers et à stocker uniquement des chemins d'image dans la base de données pour optimiser les performances de la requête et le volume de la base de données.

Non, MySQL ne peut pas se connecter directement à SQL Server. Mais vous pouvez utiliser les méthodes suivantes pour implémenter l'interaction des données: utilisez Middleware: Exporter les données de MySQL au format intermédiaire, puis importez-les sur SQL Server via Middleware. Utilisation de Database Linker: Business Tools fournit une interface plus conviviale et des fonctionnalités avancées, essentiellement encore implémentées via Middleware.
