写在前面
春招实习的简历被蚂蚁金服的前辈捞起来了,有机会第二次笔试~感谢 考试时用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)))))