每日一练 — 2022.01.01


一,字母异位词分组

1,程序简介

  • 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
  • 输入:[eat", “tea”, “tan”, “ate”, “nat”, “bat”]
  • 输出:[[ate",“eat”,“tea”],[“nat”,“tan”],[“bat”]]

说明:

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

2,程序代码

# -*- coding: utf-8 -*-
"""
Created on Sat Jan  1 11:22:44 2022
Function: 字母异位词分组
@author: 小梁aixj
"""
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 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']))

3,运行结果

在这里插入图片描述

二,N 皇后

1,程序简介

  • n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
  • 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。
  • 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
示例 1:

在这里插入图片描述

  • 输入:n = 4
  • 输出:[[".Q…","…Q",“Q…”,"…Q."],["…Q.",“Q…”,"…Q",".Q…"]]
  • 解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
  • 输入:n = 1
  • 输出:[[“Q”]]

提示:

1 <= n <= 9
皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

以下程序实现了这一功能,请你填补空白处内容:

class Solution(object):
	def solveNQueens(self, n):
		if n == 0:
			return 0
		res = []
		board = [['.'] * n for t in range(n)]
		self.do_solveNQueens(res, board, n)
		return res
	def do_solveNQueens(self, res, board, num):
		if num == 0:
			res.append([''.join(t) for t in board])
			return
		ls = len(board)
		pos = ls - num
		check = [True] * ls
		for i in range(pos):
			for j in range(ls):
				if board[i][j] == 'Q':
					______________________;
		for j in range(ls):
			if check[j]:
				board[pos][j] = 'Q'
				self.do_solveNQueens(res, board, num - 1)
				board[pos][j] = '.'
if __name__ == '__main__':
	s = Solution()
	print (s.solveNQueens(4))

2,程序代码

# -*- coding: utf-8 -*-
"""
Created on Sat Jan  1 11:23:48 2022
Function: N 皇后
@author: 小梁aixj
"""
class Solution(object):
    def solveNQueens(self, n):
        if n == 0:
            return 0
        res = []
        board = [['.'] * n for t in range(n)]
        self.do_solveNQueens(res, board, n)
        return res
    def do_solveNQueens(self, res, board, num):
        if num == 0:
            res.append([''.join(t) for t in board])
            return
        ls = len(board)
        pos = ls - num
        check = [True] * ls
        for i in range(pos):
            for j in range(ls):
                if board[i][j] == 'Q':
                    
                    check[j] = False
                    step = pos - i
                    if j + step < ls:
                        check[j + step] = False
                    if j - step >= 0:
                        check[j - step] = False
                    break
                
        for j in range(ls):
            if check[j]:
                board[pos][j] = 'Q'
                self.do_solveNQueens(res, board, num - 1)
                board[pos][j] = '.'
if __name__ == '__main__':
	s = Solution()
	print (s.solveNQueens(4))                    

3,运行结果

在这里插入图片描述

三,python 编写函数计算圆周率

1,程序简介

  • 计算圆周率。存在圆心在直角坐标系原点且半径为 1 的圆及其外切正方形。
  • 为计算方便,仅考虑位于第一象限的四分之一正方形和四分之一圆。随机生成该四分之一正方形中一系列点,散布于四分之一圆内比例即为圆周率四分之一。
  • 散步点越多,结果越精确,耗时也越长。

以下程序实现了这一功能,请你填补空白处内容:

from random import random
from math import sqrt
N=eval(input("请输入次数:"))
K=0 
for i in range(1,N+1):
	x,y=random(),random()
	dist =sqrt(x**2+y**2)
	_____________________;
pi=4*(K/N)	
print("圆周率值:{}".format(pi))

2,程序代码

# -*- coding: utf-8 -*-
"""
Created on Sat Jan  1 11:23:59 2022
Function: 编写函数计算圆周率
@author: 小梁aixj
"""
from random import random
from math import sqrt
N=eval(input("请输入次数:"))
K=0 
for i in range(1,N+1):
    x,y=random(),random()
    dist =sqrt(x**2+y**2)
    
    if dist<=1.0:
        K=K+1
        
pi=4*(K/N)	
print("圆周率值:{}".format(pi))

3,运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁辰兴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值