剑指offer10 Fibonacci
public int Fibonacci(int n) {
int a=0,b=1,sum;
for(int i=0;i<n;i++){
sum=a+b;
a=b;
b=sum;
}
return a;
}
剑指offer69 跳台阶
public int climbStairs(int n) {
if(n<=1) return 1;
int[] dp=new int[n+1];
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
力扣91 解码方法
思路:和上面两道题的思路类似。
public int numDecodings(String s){
int len=s.length();
if(len==0) return 0;
int[] dp=new int[len];
char[] charArray=s.toCharArray();
if(charArray[0]=='0') return 0;
dp[0]=1;
for(int i=1;i<len;i++){
if(charArray[i]!='0') dp[i]=dp[i-1];
int num=(charArray[i-1]-'0')*10+charArray[i]-'0';
if(num>=10&&num<=26){
if(i==1) dp[i]++;
else dp[i]+=dp[i-2];
}
}
return dp[len-1];
}
剑指offer46 把数字翻译成字符串
public int translateNum(int num) {
char[] ch=String.valueOf(num).toCharArray();
int[] dp=new int[ch.length+1];
dp[0]=1;
dp[1]=1;
for(int i=2;i<=ch.length;i++){
int n=(ch[i-2]-'0')*10+ch[i-1]-'0';
if(n>=10&&n<=25){
dp[i]=dp[i-1]+dp[i-2];
}
else{
dp[i]=dp[i-1];
}
}
return dp[ch.length];
}
优化代码:
public int translateNum(int num) {
char[] ch=String.valueOf(num).toCharArray();
int a=1;//dp[0]
int b=1;//dp[1]
for(int i=2;i<=ch.length;i++){
int n=(ch[i-2]-'0')*10+ch[i-1]-'0';
int c=0;
if(n>=10&&n<=25){
c=a+b;//dp[2]
}
else{
c=b;
}
a=b;
b=c;
}
return b;
}