Java 我想更多地了解这部分代码的功能
在中有一个问题,我正在搜索其他额外的输入来理解这个问题。我遇到了下面的代码,他们说他们使用了备忘录。我无法理解数组的用法,有人能解释一下代码吗?我想发展自己的逻辑并使用它Java 我想更多地了解这部分代码的功能,java,Java,在中有一个问题,我正在搜索其他额外的输入来理解这个问题。我遇到了下面的代码,他们说他们使用了备忘录。我无法理解数组的用法,有人能解释一下代码吗?我想发展自己的逻辑并使用它 import java.util.Scanner; class Coins { long r[] = new long[1000000]; public long Coin(long n) { if (n == 0) { return 0;
import java.util.Scanner;
class Coins {
long r[] = new long[1000000];
public long Coin(long n) {
if (n == 0) {
return 0;
}
if (n < 12) {
return n;
}
if (n < 1000000) {
if (r[(int) n] > 0) {
return r[(int) n];
}
}
long m = Math.max(n, Coin(n / 2) + Coin(n / 3) + Coin(n / 4));
if (n < 1000000) {
r[(int) n] = m;
return m;
}
}
public static void main(String[] args) throws java.lang.Exception {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLong()) {
long n = sc.nextLong();
Coins i = new Coins();
long r = i.Coin(n);
System.out.println(r);
}
}
}
import java.util.Scanner;
等级硬币{
长r[]=新长[1000000];
公众长币(长n){
如果(n==0){
返回0;
}
if(n<12){
返回n;
}
如果(n<1000000){
如果(r[(int)n]>0){
返回r[(int)n];
}
}
长m=数学最大值(n,硬币(n/2)+硬币(n/3)+硬币(n/4));
如果(n<1000000){
r[(int)n]=m;
返回m;
}
}
公共静态void main(字符串[]args)引发java.lang.Exception{
扫描仪sc=新的扫描仪(System.in);
while(sc.hasNextLong()){
长n=sc.nextLong();
硬币i=新硬币();
长r=i.硬币(n);
系统输出println(r);
}
}
}
该阵列用作内部缓存。它缓冲Math.max(n,硬币(n/2)+硬币(n/3)+硬币(n/4))的结果
,用于n
的“小”输入(<1000000
)。如果多次使用相同的输入参数,则可以避免重新计算结果
对于较小的值(
0),您可以格式化代码吗?您到底在理解哪些部分时遇到困难?函数coin调用了多次,数组的作用是什么?请在尝试格式化代码之前阅读此帮助页(您上次的编辑使情况变得更糟):
if (n < 1000000) {
if (r[(int) n] > 0)
return r[(int) n];
}
if (n < 1000000)
r[(int) n] = m;