class Solution {
public int minSteps(int n) {
// initialize the dp table
int[] memo = new int[n + 1];
memo[n] = 0;
for (int i = n - 1; i >= 1; i--) {
// since we want the minimum answer among all candidates,
// the result is initially set to the maximum value.
int res = Integer.MAX_VALUE;
// extra is the len of the copied string,
// nPastes is the number of paste operations performed after the initial copy.
int len = i;
int extra = len, nPastes = 0;
// repeat while we can successfully paste the text
while (len + extra <= n) {
// paste the text
len += extra;
nPastes++;
// find answer for the remaining length
int remain = memo[len];
// if answer is found, update the current result
if (remain != -1)
res = Math.min(res, nPastes + remain);
}
// if answer is not found, return -1,
// else return result + 1 (plus one to consider the copy operation we performed initially)
memo[i] = res == Integer.MAX_VALUE ? -1 : res + 1;
}
return memo[1];
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter