Python技术迷

福报厂P7,年薪100多万,丈母娘说,只要我考上当地的公务员,哪怕一个月2k也把女儿嫁给我~

刚看到个程序员在网上吐槽:福报厂P7,年薪百万,女朋友是大学同学,处了七年,结果丈母娘说只要考上公务员,哪怕工资才2k也同意嫁女儿。说实话,作为码农,这种情况真不稀奇。

Image

我觉得这事吧,核心不是工资多少,而是“身份标签”带来的社会安全感。有些长辈眼里,公务员就像系统里的白名单,稳定无BUG,至于你写多少代码、拿多少KPI,在她们看来都没公务员靠谱。网友们有人觉得丈母娘太现实,也有人说程序员赚钱多但加班离谱,生活没保障。其实大家说的都有点道理。

从我的角度看,这就像前端和后端,外行人永远只看界面,里边代码怎么优雅没人关心。说到底还是价值观的差异,有人看重稳定,有人看重成长,没谁绝对对错。【备注:文末可领最新资料】

面试题:排列序列

其实说实话,这题一开始我没啥思路,脑子里一堆乱七八糟的想法。题目意思大概就是,给你1到n这n个数字,让你求全排列里第k个排列(按字典序)。比如n=3,k=3,那就是[2,1,3]。反正题目是这么个意思吧。

我那会儿其实第一反应是把所有排列都生成了,然后第k个拿出来就行了嘛。结果一想不对啊,这要是n=9,那全排列有9!个,三百多万组,谁等你慢慢算啊,服务器都得跑烫了,面试官不得直接让你回家休息。

其实,后来我坐那发呆,脑子突然一转,发现有个思路,挺巧的,就是数学的那种什么阶乘的套路。怎么说呢,你想啊,其实n个数,头一个固定了,比如说1,后面就是n-1个数的全排列,也就是(n-1)!个组合。所以头一个是1的话,1开头有(n-1)!个排列,2开头有(n-1)!个排列,依次类推。

比如说,k如果大于(n-1)!,那说明头一个肯定不是1,反正就是这么个意思。然后你每次都除一下,找到第几个,然后就能确定下一个数是谁,一步步往下推,根本不用全排出来。

我当时手里就直接上python了,顺手写了个小代码:

defgetPermutation(n, k):
from math import factorial
    nums = [str(i) for i in range(1, n+1)]
    k -= 1
    ans = []
for i in range(n, 0, -1):
        idx, k = divmod(k, factorial(i-1))
        ans.append(nums.pop(idx))
return''.join(ans)

你别说,这代码其实挺短的。那个nums就是1到n的数字,然后每次都找到应该用哪个数,pop掉,最后拼起来就是答案。你别看我写得利索,其实调试了半天,主要是k要减1,要不然下标不对,输出全错,群里还有人调侃我,是不是喝多了。

你们看明白没?反正我那时候给小伙子讲了半天,他还说是不是太抽象了,非要我举个例子。行,我举个,n=4,k=9,你先算(n-1)!=6,然后9-1=8, 8//6=1,所以第一个数就是nums[1],也就是2,然后再剩下[1,3,4],k=8%6=2,依次往下推。

其实这个思路,真要说难也不难,就是脑子得拐过来,不然你就会被全排列的暴力吓住,一直写不出来。面试的时候要是能把这个思路讲明白,面试官一般都挺满意的,毕竟这就是“空间换时间”,又有点数学的意思。

啊对了,我写到一半还接了个电话,回来差点把nums写成num了,调试半天才发现,是不是你们也经常这样。总之,这题就这么个路子,你们回去再琢磨琢磨,感觉不难,其实细节挺多。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领