2 Keys Keyboard
Posted 唐僧洗发爱飘柔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2 Keys Keyboard相关的知识,希望对你有一定的参考价值。
这道题为中等题
题目:
思路:
我的: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的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 2 Keys Keyboard 两键的键盘
leetcode 650. 2 Keys Keyboard 只有两个键的键盘(中等)