Re: [闲聊] 每日leetcode

楼主: enmeitiryous (enmeitiryous)   2024-08-19 08:47:37
题目:
650. 2 Keys Keyboard
给你一个只有两种功能:1.复制当前萤幕上所有A 2.贴上所复制的A 两种功能的键盘
当前萤幕上有一个A,求给定n后欲贴印出n个A所需的最少operation数
思路:
对于数字i可以他的min operation数为i的所有因子的min operation数加对应倍数中
的最小值用dp表示为dp[i]=min(dp[j]+i/j) for all j, s.t i%j=0,所以照列表格即可
但其实正解应该是把他拆成数学来看递回除下去直到n=1纪录次数或是n是质数就回传n
会更快(top down)
int minSteps(int n) {
//Initially, we have one character 'A'.
vector<int> pre_ans(n+1,0);
for(int i=2;i<n+1;++i){
pre_ans[i]=i;
}
for(int i=2;i<n+1;++i){
for(int j=2;j<i;++j){
if(i%j==0){
pre_ans[i]=min(pre_ans[j]+(i/j),pre_ans[i]);
}
}
}
return pre_ans[n];
}

Links booklink

Contact Us: admin [ a t ] ucptt.com