LeetCode:650. 2 Keys Keyboard(DP/递归)

本文探讨了一个有趣的算法问题:如何在记事本上通过最少的操作步骤得到n个字符'A'。通过分析不同n值下的操作次数,我们发现了一个规律:如果n为质数,操作数即为n;若非质数,则操作数为其最大约数的操作次数加上额外的步骤。此算法适用于信息技术领域的优化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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: 3
Output: 3
Explanation:
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'.

思路:找规律:选取不同的n,计算各操作次数。发现规律:如果是质数,操作数就是本身;否则,数n的操作数是其最大的约数i的操作次数加上一次copy all +n/i-1次的paste。

class Solution {
public:
    int minSteps(int n) {
        if(n == 1) return 0;
        int res = n;
        for(int i = n-1; i>1; i--){
            if(n % i == 0){
                return minSteps(i)+(n/i);
            }
                
        }
        return res;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值