0821滴滴笔试

数据岗

1. 旋转斐波那契数列放进数组中。

2. 输入字符矩阵,判断“CHINA”个数

第一题:

def addValue(matrix, fibList, tr, tc, dr, dc):
    if tr == dr:
        for i in range(tc, dc + 1):
            matrix[tc][i] = fibList.pop()
    elif tc == dc:
        for i in range(tr, dr + 1):
            matrix[i][tc] = fibList.pop()
    else:
        curC = tc
        curR = tr
        while curC != dc:
            matrix[tc][curC] = fibList.pop()
            curC += 1
        while curR != dr:
            matrix[curR][dc] = fibList.pop()
            curR += 1
        while curC != tc:
            matrix[dr][curC] = fibList.pop()
            curC -= 1
        while curR != tr:
            matrix[curR][tc] = fibList.pop()
            curR -= 1


def test01(n):
    if n < 2:
        print(n)
        return
    item1, item2 = 0, 1
    fibonacciList = [1]
    for _ in range(2, n * n + 1):
        ans = item1 + item2
        item1, item2 = item2, ans
        fibonacciList.append(ans)
    res = [[0] * n for _ in range(n)]
    tr, tc = 0, 0
    dr, dc = n - 1, n - 1
    while tr <= dr and tc <= dc:
        addValue(res, fibonacciList, tr, tc, dr, dc)
        tr += 1
        tc += 1
        dr -= 1
        dc -= 1
    for i in range(n):
        for j in range(n):
            print(res[i][j], end=" ")
        print()


if __name__ == '__main__':
    n = int(input())
    test01(n)

第二题

def test02(matrix, china, rows, cols):
    tmp = [True] * rows * cols
    count = 0
    for i in range(rows):
        for j in range(cols):
            res = find(matrix, tmp, rows, cols, i, j, china)
            count += res
    print(count // 4)


def find(matrix, tmp, rows, cols, i, j, path):
    count = 0
    if not path:
        return 1
    index = i * cols + j
    if i < 0 or i >= rows or j < 0 or j >= cols \
            or matrix[index] != path[0] or not tmp[index]:
        return 0
    tmp[index] = False
    # if find(matrix, tmp, rows, cols, i - 1, j, path[1:]) \
    #         or find(matrix, tmp, rows, cols, i + 1, j, path[1:]) \
    #         or find(matrix, tmp, rows, cols, i, j - 1, path[1:]) \
    #         or find(matrix, tmp, rows, cols, i, j + 1, path[1:]):
    #     return True
    count = find(matrix, tmp, rows, cols, i - 1, j, path[1:]) + \
            find(matrix, tmp, rows, cols, i + 1, j, path[1:]) + \
            find(matrix, tmp, rows, cols, i, j - 1, path[1:]) + \
            find(matrix, tmp, rows, cols, i, j + 1, path[1:])
    # if find(matrix, tmp, rows, cols, i - 1, j, path[1:]):
    #     count += 1
    # if find(matrix, tmp, rows, cols, i + 1, j, path[1:]):
    #     count += 1
    # if find(matrix, tmp, rows, cols, i, j - 1, path[1:]):
    #     count += 1
    # if find(matrix, tmp, rows, cols, i, j + 1, path[1:]):
    #     count += 1
    # return True
    tmp[index] = True
    return count


if __name__ == '__main__':
    n = int(input().strip())
    matrix = []
    for i in range(n):
        matrix.extend(input().strip())
    # matrix = list(matrix)
    test02(matrix, "CHINA", n, n)
#滴滴##笔试题目#
全部评论
大佬能说说第二题的思路嘛
点赞 回复 分享
发布于 2020-08-21 23:51
大佬  为啥count//4呢?
点赞 回复 分享
发布于 2020-08-22 18:57

相关推荐

11-13 11:12
门头沟学院 Java
咩咩子_:专业技能写上面 项目往下放,如果可以的话改一下学校最好
点赞 评论 收藏
分享
评论
1
8
分享
牛客网
牛客企业服务