原题链接
class Solution {
public int fib ( int n) {
int a = 0 , b = 1 , sum;
for ( int i = 0 ; i < n; i++ ) {
sum = ( a + b) % 1000000007 ;
a = b;
b = sum;
}
return a;
}
}
class Solution {
int mod = ( int ) 1e9 + 7 ;
public int fib ( int n) {
if ( n <= 1 ) return n;
int a = 0 , b = 1 ;
for ( int i = 2 ; i <= n; i++ ) {
int c = a + b;
c %= mod;
a = b;
b = c;
}
return b;
}
}
原题链接
为什么初始条件 a 和 b 都是1 想成数学问题,要满足f(n) = f(n-1)+f(n-2),即要满足f(2) = f(1)+f(0),逆推得证f(0) = 1 假设n 为3,则计算有几种方法:关于for循环的设计,可以带入n = 3 手算
class Solution {
public int numWays ( int n) {
int a = 1 , b = 1 , sum;
for ( int i = 0 ; i < n; i++ ) {
sum = ( a + b) % 1000000007 ;
a = b;
b = sum;
}
return a;
}
}
原题链接
class Solution {
public int minArray ( int [ ] numbers) {
int i = 0 ;
int j = numbers. length - 1 ;
while ( i < j) {
int mid = ( i + j) / 2 ;
if ( numbers[ mid] > numbers[ j] ) i = mid + 1 ;
else if ( numbers[ mid] < numbers[ j] ) j = mid;
else j-- ;
}
return numbers[ i] ;
}
}
class Solution {
public int minArray ( int [ ] numbers) {
int i = 0 , j = numbers. length - 1 ;
while ( i < j) {
int m = ( i + j) / 2 ;
if ( numbers[ m] > numbers[ j] ) i = m + 1 ;
else if ( numbers[ m] < numbers[ j] ) j = m;
else j-- ;
}
return numbers[ i] ;
}
}
原题链接
在主函数中双层for循环,不断寻找满足条件的第一个位置 在dfs中 先判断是否越界 以及 当前位置的board 的值 是否和 words中的第k个元素相等,若相等则执行后序的递归 递归的截止条件 当 k 和 words.length - 1 相等的时候,说明所有的 words的元素都已经找到了,则返回true,这个true会通过递归赋值给res,在函数的末尾将res 返回 在主函数中,若dfs()判断为true,则返回true,反之,执行完for循环后,返回false
class Solution {
public boolean exist ( char [ ] [ ] board, String word) {
char [ ] words = word. toCharArray ( ) ;
for ( int i = 0 ; i < board. length; i++ ) {
for ( int j = 0 ; j < board[ 0 ] . length; j++ ) {
if ( dfs ( board, words, i, j, 0 ) ) return true ;
}
}
return false ;
}
public boolean dfs ( char [ ] [ ] board, char [ ] words, int i, int j, int k) {
if ( i >= board. length || i < 0 || j >= board[ 0 ] . length || j < 0 || board[ i] [ j] != words[ k] ) return false ;
if ( k == words. length - 1 ) return true ;
board[ i] [ j] = '\0' ;
boolean res = dfs ( board, words, i + 1 , j, k + 1 ) || dfs ( board, words, i - 1 , j, k + 1 ) ||
dfs ( board, words, i, j + 1 , k + 1 ) || dfs ( board, words, i , j - 1 , k + 1 ) ;
board[ i] [ j] = words[ k] ;
return res;
}
}