剑指offer-14-2
给你一根长度为 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
。
给你一根长度为 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
。
给你一根长度为 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
。
地上有一个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
。请问该机器人能够到达多少个格子?
给定一个 m x n
二维字符网格 board
和一个字符串单词 word
。如果 word
存在于网格中,返回 true
;否则,返回 false
。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。
1 | 输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED" |
本问题是典型的矩阵搜索问题,可使用 深度优先搜索(DFS)+ 剪枝 解决。
这条路不可能和目标字符串匹配成功
的情况(例如:此矩阵元素和目标字符不同、此元素已被访问),则应立即返回,称之为 可行性剪枝
。DFS 解析:
board
中的行列索引 i
和 j
,当前目标字符在 word
中的索引 k
。k = len(word) - 1
,即字符串 word
已全部匹配。board[i][j]
修改为 空字符 ''
,代表此元素已访问过,防止之后搜索时重复访问。或
连接 (代表只需找到一条可行路径就直接返回,不再做后续 DFS ),并记录结果至 res
。board[i][j]
元素还原至初始值,即 word[k]
。res
,代表是否搜索到目标字符串。使用空字符(Python: ‘’ , Java/C++: ‘\0’ )做标记是为了防止标记字符与矩阵原有字符重复。当存在重复时,此算法会将矩阵原有字符认作标记字符,从而出现错误。
1 | class Solution: |
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2]
为 [1,2,3,4,5]
的一个旋转,该数组的最小值为1。
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n
级的台阶总共有多少种跳法。
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
给你 n
个非负整数 a1,a2,..给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。.,a``n
,每个数代表坐标中的一个点 (i, ai)
。
在坐标内画 n
条垂直线,垂直线 i
的两个端点分别为 (i, ai)
和 (i, 0)
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
请你来实现一个 myAtoi(string s)
函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi
函数)。
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。