LeetCode 650 2 Keys Keyboard

来源:互联网 发布:文华财经mac版 编辑:程序博客网 时间:2024/05/13 17:00

题目:

Initially on a notepad only one character 'A' is present. You can perform two operations on this notepad for each step:

  1. Copy All: You can copy all the characters present on the notepad (partial copy is not allowed).
  2. Paste: You can paste the characters which are copied last time.

Given a number n. You have to get exactly n 'A' on the notepad by performing the minimum number of steps permitted. Output the minimum number of steps to get n 'A'.

Example 1:

Input: 3Output: 3Explanation:Intitally, we have one character 'A'.In step 1, we use Copy All operation.In step 2, we use Paste operation to get 'AA'.In step 3, we use Paste operation to get 'AAA'.

Note:

  1. The n will be in the range [1, 1000].
题意:

初始字符串为“A”,只有两种操作允许:

  1. Copy All:把当前所有的字符复制
  2. Paste:把最后一次复制的字符串粘贴
问最少经过多少步可以把初始字符串变成给定 n 个’A'的字符串。
n的范围是 [1, 1000]

可以当作模拟来做,对于每次都有两种情况,复制和粘贴,分别进行模拟。
尝试过dp,没改出来,,差点火候,还是要练习啊

代码如下:
class Solution {public:    int ans = 999999999;void dfs(int now, int copy, int step, int n) {    if (now == n) {    ans = min(ans, step);    }    else if (now > n) return;    if (copy != 0)dfs(now + copy, copy, step + 1, n);    if (now != copy)dfs(now, now, step + 1, n);        }    int minSteps(int n) {dfs(1, 0, 0, n);return ans;    }};