int MAX = 1001;
class Solution {
public:
int dp(int n, int have, int c) { //have代表已经有了几个A,c代表当前复制板上有几个A
if (n == have) { // 如果已经到达目标,返回0
return 0;
} else if (n < have) { // 如果超出了目标,则代表无解,返回MAX
return MAX;
} else if ((n - have) % c != 0) { // 如果已经不能被整除,无解(因为have一定是c的倍数,此时再复制也无意义)
return MAX;
}
int temp1 = 2 + dp(n, have * 2, have); // 复制一次加粘贴一次
int temp2 = 1 + dp(n, have + c, c); // 不复制,只粘贴
if (temp1 > temp2) { //哪种操作次数少,返回哪一种
return temp2;
} else {
return temp1;
}
}
int minSteps(int n) {
if (n <= 1) {
return 0;
}
return dp(n, 1, 1) + 1;
}
};
LeetCode605题 (2 Keys Keyboard)
最新推荐文章于 2021-08-07 09:39:28 发布