【算法练习20190802】

1、推理题

抓了A,B,C,D四名犯罪嫌疑人,其中有一人是小偷,审讯中:

A:我不是小偷;

B:C是小偷;

C:小偷肯定是D;

D:C胡说!

其中有三个人说的是实话,一个人说的是假话,请编程推断谁是小偷(用穷举法和逻辑表达式)。

 

[1]分析:可以遍历假设某个人是小偷,然后验证。

[2]代码

'''第i个人是假话'''
'''i=1的话假设A是小偷'''
for i in range(4):
    i += 1
    print(i)
    if 3 == ((i != 1) + (i == 3) + (i == 4) + (i != 4)):
        str = chr(96 + i) + "是小偷"
        print(str)

2、有效的数独

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。

数字 1-9 在每一列只能出现一次。

数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

[1]分析:用三个二维数组来保存行、列、粗线宫,一次遍历数独即可判断是否有重复。

[2]代码

class Solution(object):
    def isValidSudoku(self, board):
        """
        :type board: List[List[str]]
        :rtype: bool
        """
        rows = [[] for _ in range(9)]
        columns = [[] for _ in range(9)]
        boxes = [[] for _ in range(9)]
        for i in range(9):
            for j in range(9):
                num = board[i][j]
                box_index = (i // 3) * 3 + j // 3 #判断在第几个粗线宫
                if num != '.':
                    if num in rows[i] or num in columns[j] or num in boxes[box_index]:#判断行、列、粗线宫是否重复
                        return False
                    else:
                        rows[i].append(num)
                        columns[j].append(num)
                        boxes[box_index].append(num)
        return True
a = [
  ["5","3",".",".","7",".",".",".","."],
  ["6",".",".","1","9","5",".",".","."],
  [".","9","8",".",".",".",".","6","."],
  ["8",".",".",".","6",".",".",".","3"],
  ["4",".",".","8",".","3",".",".","1"],
  ["7",".",".",".","2",".",".",".","6"],
  [".","6",".",".",".",".","2","8","."],
  [".",".",".","4","1","9",".",".","5"],
  [".",".",".",".","8",".",".","7","9"]
]
print(Solution().isValidSudoku(a))

3、旋转图像

给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

[分析]马上想到zip转置函数zip(*matrix)。顺时针即转置后每一个元素倒置。

[代码]

def rotate(matrix):
    """
    :type matrix: List[List[int]]
    :rtype: void Do not return anything, modify matrix in-place instead.
    """
    matrix[:] = [list(x[::-1]) for x in zip(*matrix)]#转置后每个元素内部倒置
matrix = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
]
rotate(matrix)
print(matrix)

 

4、批量处理一个文件夹下的图象

(1)对图象进行中值滤波,保存滤波结果

(2)对图象进行直方图均衡化(即灰度拉伸)

(3)根据图像特征,找阈值,提取ROI(感兴趣区域)

(4)提取当前文件夹下所有文件名,并写入到excel中

5、列表

(1)创建一个包含1-100之间所有素数的列表,打印显示该列表;

(2)随后只保留该列表前5个数字,删除其余内容并打印输出相应结果;

(3)再将每个元素值加上100,显示列表内容。

6、输入某年某月某日,判断这一天是这一年的第几天?

7、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

8、给定一个没有重复数字的序列,返回其所有可能的全排列。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值