题目描述
求从坐标零点到坐标点n的最小步数,一次只能沿横坐标轴向左或向右移动 2 或 3。
注意:途径的坐标点可以为负数
输入描述
坐标点n
输出描述
输出从坐标零点移动到坐标点n的最小步数
备注
1 <= n <= 10^9
用例
输入
4
输出
2
从坐标零点移动到4,最小需要两步,即右移2,再右移2
代码思路-动态规划
我们可以定义一个数组dp,其中dp[i]表示到达坐标点i所需的最小步数。初始时,dp[0]为0,表示到达坐标零点不需要移动。
然后,我们可以通过遍历数组dp来计算dp[i]的值。对于每个dp[i],我们可以选择从dp[i-2]或dp[i-3]转移过来,因为一次只能移动2或3步。所以我们可以得到状态转移方程:
dp[i] = min(dp[i-2], dp[i-3]) + 1
其中,dp[i-2]表示从坐标点i-2移动2步到达坐标点i,dp[i-3]表示从坐标点i-3移动3步到达坐标点i。因为题目要求途径的坐标点可以为负数,所以我们需要保证i-2和i-3都是合法的坐标点。
最后,我们可