一、问题描述
二、解题方法
可以采用两种方式:
方式1.使用递归,f(n)=f(n-1)+f(n-2);
当n=1时,返回first;当n=2时,返回second;
方式2.从第3个结点开始计算,当计算到第n个结点值的时候结束并返回计算结果。
f(3)=f(2)+f(1);f(4)=f(3)+f(2);f(5)=f(4)+f(3);... 一直计算到f(n);
从执行次数来看,方式1的执行效率比方式2低。
三、代码实现
方式1.递归实现 ↓
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param first int整型
* @param second int整型
* @param n int整型
* @return int整型
*/
public int findNthValue (int first, int second, int n) {
//所有节点值的集合就是一个斐波那契数列
int res=0;
//可以使用递归方式
if(n==1){
res=first;
}else if(n==2){
res=second;
}else{
res=findNthValue(first,second,n-1)+findNthValue(first,second,n-2);
}
return res;
}
}
方式2.遍历计算 ↓
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param first int整型
* @param second int整型
* @param n int整型
* @return int整型
*/
public int findNthValue (int first, int second, int n) {
//所有节点值的集合就是一个斐波那契数列
int res=0;
//也可以使用遍历方式
int icounter=0;
int pre1=first,pre2=second;
if(n==1){
res=first;
}else if(n==2){
res=second;
}else{
icounter=3;
for(;icounter<=n;icounter++){
res=pre1+pre2;
pre1=pre2;
pre2=res;
}
}
return res;
}
}
四、刷题链接
牛牛猜节点_牛客题霸_牛客网