LeetCode——机器人的运动范围、剪绳子

机器人的运动范围

地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?

示例1:

输入:m = 2, n = 3, k = 1
输出:3

示例2:

输入:m = 3, n = 1, k = 0
输出:1

提示:

1 <= n,m <= 100
0 <= k <= 20

本题依然是矩阵搜索的问题,利用递归实现深度优先搜索或用队列实现广度优先搜索是好的解决方法。深度优先相对更易理解,代码如下。
代码:

def movingCount(self, m: int, n: int, k: int) -> int:
    def dfs(i, j, si, sj):
        if i >= m or j >= n or k < si + sj or (i, j) in visited: return 0
        visited.add((i,j))
        return 1 + dfs(i + 1, j, si + 1 if (i + 1) % 10 else si - 8, sj) + dfs(i, j + 1, si, sj + 1 if (j + 1) % 10 else sj - 8)

    visited = set()
    return dfs(0, 0, 0, 0)

时空复杂度都为O(MN)。本题利用一个set存储已访问过的位置,当下标越界或已访问则返回0。本题的一个关键是,从原点开始深度优先递归,未访问过的候选点只可能在右方或下方。

  • i, j为行列索引,si,sj为两者数位和
  • 100以内,索引加1,新数位和为:sx + 1 if (x + 1) % 10 else sx - 8

剪绳子

给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

示例1:

输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1

示例2:

输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36

提示:

2 <= n <= 58

此题为数学问题,可以用数学解法:

  1. 由公式 n 1 + n 2 + . . . n a a ⩾ n 1 n 2... n a a \frac {n1+n2+...na} {a} \geqslant \sqrt[a]{n1n2...na} an1+n2+...naan1n2...na
    当且仅当n1n2…na相等时等号成立,知绳子均分的乘积最大

2.设绳子长为x,等分为a段,则乘积为: x a = x n x = ( x 1 x ) n x^{a}=x^{\frac{n}{x}}=(x^{\frac{1}{x}})^{n} xa=xxn=(xx1)n
由于n为常数,所以问题转化为求 y = x 1 x y=x^{\frac{1}{x}} y=xx1的极大值,对x求导数,得出x=3时y最大,因此尽可能将绳子3等分多段,乘积最大。

所以得出切分规则:

  • 若能正好3等分绳子则将其三等分
  • 若余数为2则保留长度为2的绳段
  • 若余数为1则把一份3+1改为2+2,因为2x2>3x1
  • 若绳子长度小于1,由于m>1,要有1小段长度为1

代码

class Solution:
    def cuttingRope(self, n: int) -> int:
        if n <= 3:
            return n-1
        if n % 3 == 0:
            return int(3 ** (n/3))
        elif n % 3 == 2:
            return int(3 ** (n//3) * 2)
        else:
            return int(3 ** (n//3-1) * 4)  if 3 ** (n//3-1) * 4 > 0 else 4

猜你喜欢

转载自blog.csdn.net/ewfwewef/article/details/108809149
今日推荐