650. 2 Keys Keyboard
public int minSteps(int n) { /* 由于只能复制全部或者一个,所以: 如果一个数不是质数,那么最快的就是由最大的公因子复制而来 如果一个数是质数,那么所有方式都大于等于全部由1复制而来 网上看了看这个规律都是观察得出的,所以直接背过: 两个键的键盘问题(只能全部复制或者粘贴问题): 非质数就考虑最大公因子,质数就直接返回n(当然考察质数也是需要循环判断没有因子) */ if (n <= 1) return 0; int[] dp = new int[n+1]; dp[0] = 0; dp[1] = 0; for (int i =2;i < n+1;i++ ) { for (int j = i-1;j > 0;j--) { if (i % j == 0) { //i/j是(i/j-1)+1,(i/j-1)代表粘贴(i/j-1),后边加的1是复制 dp[i] = dp[j] + (i/j); break; } } } return dp[n]; }