
大家在平时刷题的过程中,不仅仅要注意理解问题的本质,而且要在解决问题的基础上,优化自己的解题思路和程序。
今天,小编就带领大家来进行三道简单问题的解决,从屌丝解法到进阶解法再到高手解法,一步步的带领大家来提升自己的解题技巧和编程思路。
第一题 二进制中的1的个数
1).题目描述:
给定一个非负数,请编写一个函数,该函数以整数作为输入,并返回该数字的二进制表示形式中等于1的位数。例如,对于整数14来说,它的二进制形式为01110,所以它的二进制表示形式中等于1的位数就是3。
2).屌丝解法
对于这道题来说,屌丝解法该如何解决呢?

3).进阶解法
进阶的解法中,可以利用python内置的bin函数,将十进制转化为2进制;
然后将二进制数值转化为字符串的形式
然后不断循环,判断字符串的每一位是不是1。

4).高手解法
高手解法中,不仅可以利用bin函数,而且在特定字符统计上也可以利用count函数。充分利用python的内置函数,可以帮助我们在解题过程中大大的节省时间和程序。

第二题 矩形转成正方形
题目描述:将一个二维的矩形切割成为标准的正方形,用户将获得两个维度信息(lng和wdth)请返回每个正方形大小的集合。如下图所示。

上图中的一个3x5(lng=3,wdth=5)维的二维矩阵,可以分割为一个3x3的矩阵,一个2x2的矩阵和两个1x1的矩阵。所以对于输入的参数3,5。返回的结果为[3,2,1,1]。
1).屌丝解法
初级的解法应该如何来对待这个问题呢?

2).进阶解法
对于进阶解法,可以采用递归算法来解决该题,例如对于sqInRect(3,5)可以分解为下面的解题思路。

可以看到,程序可以通过不断的递归循环来解决,通过递归循环,可以减少程序量。

3).高手解法

对于高手解法,直接采用lambda匿名函数,一行代码就可以解决问题,大大减少了程序的编程量,让程序具有了简洁的python语言特色。
第三题 你的名字有多性感?
1).题目描述
编写一个程序sexy_name,根据以下条件计算一个人的名字的性感程度。
有一个预装的字母分数字典,称为SCORES。将名称中的字母(不区分大小写)加起来以获得性感的分数。忽略其他字符。其中SCORES为:

程序必须根据“性感分数排名”图表返回姓名的性感程度,其中,score为名字的得分,例如:

示例:sexy_name('SAMANTHA') = 'THE ULTIMATE SEXIEST'
、sexy_name('you') = 'VERY SEXY'
。
2).屌丝解法
这道题非常容易理解,只需要按部就班就可以写出来最简单的代码。

3).进阶解法
对于屌丝解法中,可以看到通过for循环来计算总得分让程序看起来非常的low,所以我们来优化这个问题,通过sum函数来一行代码求取综合得分。

4).高手解法

在高手解法中,有两个点值得我们学习:
利用SCORES.get(x, 0)来获取字典中的数值,如果字典中不存在键值x,则返回默认值0。从而有效的规避了name中无效的字符。
利用sum([score >= 61,score >= 301,score >= 600])求和来作为索引。例如我们的socre为320分,则[score >= 61,score >= 301,score >= 600] = [1,1,0],则sum([score >= 61,score >= 301,score >= 600])=2,对应返回的姓名性感程度为“VERY SEXY”。巧妙的利用求和来作为索引,非常值得大家学习。
总结
通过以上三道题目的讲解,可以看到,虽然都是解决一道问题,但是程序所体现出来的个人编程能力却有着巨大的差别!
所以只有不断的优化,打磨自己的编程技巧,才能让自己不断向着高手迈进!
欢迎大家在留言区吱一声,如何才能提高自己的Python技巧!
菜鸟编程大本营,已经正式上线
专注于分享趣味的编程技巧,不限于Java, Python ,Go, Javascript等语言,让菜鸟爱上编程,进阶成为高手,欢迎关注。
