蚂蚁金服笔试题加试——字符串的全排列(python版)

写在前面

春招实习的简历被蚂蚁金服的前辈捞起来了,有机会第二次笔试~感谢 考试时用java写的,找了一下牛客网的链接重新写了一哈
第一个题是字符串的全排列(剑指offer原题),第三个是求两个排序数组的中位数。

题目描述

(牛客题目传送门)
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

常规解法

把大问题分为小问题,把一个字符串看成两部分。即abc=a+bc
然后分两步,先求所有可能出现在第一个位置的字符(即把第一个字符和后面所有字符交换)
然后对后面那部分用同样的方法递归求解。

常规解法的代码

# -*- coding:utf-8 -*-
class Solution:
    def Permutation(self, ss):
        ans = []
        #尝试第i个位置的所有可能
        def permutation(listx, i):
            if i == len(listx):
                ans.append(''.join(listx))
            else:
                for idx in range(i,len(ss)):
                    #把位置i的元素和他后面元素交换
                    t = listx[idx]
                    listx[idx] = listx[i]
                    listx[i] = t
                    permutation(listx, i+1);
                    #再换回来
                    t = listx[idx]
                    listx[idx] = listx[i]
                    listx[i] = t
        listx = list(ss)
        if listx is None or len(listx) == 0:
            return []
        permutation(listx,0)
        return sorted(set(ans))#注意需要排序

if __name__ == '__main__':
    Solution().Permutation("")

投机取巧版:万能的python库函数itertools.permutations

# -*- coding:utf-8 -*-
import itertools
class Solution:
    def Permutation(self, ss):
        # write code here
        if not ss:
            return []
        return sorted(list(set(map(''.join, itertools.permutations(ss)))))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值