Python每日一练(20230312)

Posted Hann Yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python每日一练(20230312)相关的知识,希望对你有一定的参考价值。

目录

1. 提示用户输入的简单菜单  ★

2. 字母异位词分组  ★★

3. 俄罗斯套娃信封问题  ★★★

🌟 每日一练刷题专栏

C/C++ 每日一练 ​专栏

Python 每日一练 专栏


1. 提示用户输入的简单菜单

如果用户选择菜单选项1,提示用户输入1到10之间的整数,并打印一个乘法表,显示整数1与输入整数相乘的结果,如下面的示例所示。

注意:不需要检查输入的数字是否在1到10之间。

如果用户选择菜单选项2,退出程序。

如果用户在菜单选择中输入了1或2以外的任何内容,输出信息“菜单选择错误,请重试并继续程序。”

结果应该如下:

1)创建乘法表

2)退出程序

请从以上菜单中选择一个选项:1

输入一个介于1到10之间的整数:3

1  2  3 

2  4  6 

3  6  9 

1)创建乘法表

2)退出程序

请从以上菜单中选择一个选项:4

菜单选择错误,请重试

1)创建乘法表

2)退出程序

请从以上菜单中选择一个选项:2

谢谢你使用乘法表

代码:

while True:
    print('1)创建乘法表')
    print('2)退出程序')
    n = input('请从以上菜单中选择一个选项:').strip()
    if n=='1':
        x = int(input('输入一个介于1到10之间的整数:'))
        for i in range(1,x+1):
            for j in range(1,x+1):
                print(":>4".format(i*j),end="")
            print()
    elif n=='2':
        print('谢谢你使用乘法表')
        break
    else:
        print('菜单选择错误,请重试')
    print('-----------------------------')

输入输出:

1)创建乘法表
2)退出程序
请从以上菜单中选择一个选项:1
输入一个介于1到10之间的整数:3
   1   2   3
   2   4   6
   3   6   9
-----------------------------
1)创建乘法表
2)退出程序
请从以上菜单中选择一个选项:4
菜单选择错误,请重试
-----------------------------
1)创建乘法表
2)退出程序
请从以上菜单中选择一个选项:2
谢谢你使用乘法表


2. 字母异位词分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入:[eat", "tea", "tan", "ate", "nat", "bat"]
输出:[[ate","eat","tea"],["nat","tan"],["bat"]]

说明:

  • 所有输入均为小写字母。
  • 不考虑答案输出的顺序。

代码:

class Solution(object):
    def groupAnagrams(self, strs):
        strs.sort()
        hash = 
        for s in strs:
            key = self.hash_key(s)
            try:
                hash[key].append(s)
            except KeyError:
                hash[key] = [s]
        return list(hash.values())
    def hash_key(self, s):
        table = [0] * 26
        for ch in s:
            index = ord(ch) - ord('a')
            table[index] += 1
        return str(table)
    
# %%
s = Solution()
print(s.groupAnagrams(strs = ["eat", "tea", "tan", "ate", "nat", "bat"]))

输出:

[['ate', 'eat', 'tea'], ['bat'], ['nat', 'tan']]


3. 俄罗斯套娃信封问题

给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。

当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。

请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。

注意:不允许旋转信封。

示例 1:

输入:envelopes = [[5,4],[6,4],[6,7],[2,3]]
输出:3
解释:最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]。

示例 2:

输入:envelopes = [[1,1],[1,1],[1,1]]
输出:1

提示:

  • 1 <= envelopes.length <= 5000
  • envelopes[i].length == 2
  • 1 <= wi, hi <= 10^4

代码:

class Solution:
    def maxEnvelopes(self, envelopes) -> int:
        """
        :param envelopes: List[List[int]]
        :return: int
        """
        n = len(envelopes)
        if not n:
            return 0
        envelopes.sort(key=lambda x: (x[0], -x[1]))
        dp = [1] * n
        for i in range(n):
            for j in range(i):
                if envelopes[j][1] < envelopes[i][1]:
                    dp[i] = max(dp[i], dp[j] + 1)
        return max(dp)
    
# %%
s = Solution()
envelopes = [[5,4],[6,4],[6,7],[2,3]]
print(s.maxEnvelopes(envelopes))

envelopes = [[1,1],[1,1],[1,1]]
print(s.maxEnvelopes(envelopes))

输出:

3
1


🌟 每日一练刷题专栏

 持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

  收藏,你的青睐是我努力的方向! 

 评论,你的意见是我进步的财富!  

C/C++ 每日一练 ​专栏

​​

Python 每日一练 专栏

以上是关于Python每日一练(20230312)的主要内容,如果未能解决你的问题,请参考以下文章

Python 每日一练

python每日一练之20170611

Python 每日一练

python每日一练之单元测试

Python每日一练——第1天:水仙花数

Python每日一练——第5天:闰年问题升级版