解法一:时间复杂度空间复杂度O(n)
Fibonacci数列
import java.util.*;
public class Main {
public static int MAX=32;
public static void main(String args[]){
Scanner in=new Scanner(System.in);
int num[]=new int[MAX]; //空间换时间
num[0]=0;
num[1]=1;
for(int i=2;i<MAX;i++){
num[i]=num[i-1]+num[i-2];
}
while(in.hasNext()){
int n=in.nextInt();
int Mind=Integer.MAX_VALUE,temp;
for(int i=0;i<MAX;i++){
temp=Math.abs(num[i]-n);
if(Mind>=temp){ //差距会越来越小,当差距变大时,说明上一个就是最小差距
Mind=temp;
}else{
System.out.println(Mind);
break;
}
}
}
}
}
解法2空间复杂度:o(1)
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int n=in.nextInt();
int temp1=0;
int temp2=1;
while(temp2<n) {
int temp3=temp1+temp2;
temp1=temp2;
temp2=temp3;
}
System.out.println(Math.min(n-temp1, temp2-n));
}
}
}