1. 程式人生 > >2 Keys Keyboard

2 Keys Keyboard

key urn int -1 是我 steps 技術 range d+

    這道題為中等題

  題目:

    技術分享

  思路:

    我的:DP,狀態轉換方程為 dp[i] = dp[p] + i / p,其中i為當前索引,p為i的因數,這個還是很容易想到的,比如i=8,p為4時,dp[8]就等於dp[4]+8/4,其中8/4可以理解為把i=4是的情況進行復制再粘貼的數量。但是這樣的話復雜度比較高,下面一種方法是我在討論區看見的

    另一種:列表從2到n-1循環,如果n % d == 0,那麽s+=d,n變為n/d

  代碼:

    我的:

 1 class Solution(object):
 2     def minSteps(self, n):
 3
""" 4 :type n: int 5 :rtype: int 6 """ 7 dp = [0 for i in xrange(n+1)] 8 for i in xrange(2, n+1): 9 j = i - 1 10 dp[i] = i 11 for p in xrange(j, 1, -1): 12 if i % p == 0: 13 dp[i] = dp[p] + i / p
14 break 15 return dp[n]

    另一種方案(JAVA):

 1 public int minSteps(int n) {
 2         int s = 0;
 3         for (int d = 2; d <= n; d++) {
 4             while (n % d == 0) {
 5                 s += d;
 6                 n /= d;
 7             }
 8         }
 9         return
s; 10 }

2 Keys Keyboard