跳台階問題。
乙個台階總共有n 級,如果一次可以跳1 級,也可以跳2 級。
求總共有多少總跳法,並分析演算法的時間複雜度。
我們把n級台階時的跳法看成是n的函式,記為f(n)。當n>2時,第一次跳的時候就有兩種不同的選擇:一是第一次只跳1級,此時跳法數目等於後面剩下的n-1級台階的跳法數目,即為f(n-1);另外一種選擇是第一次跳2級,此時跳法數目等於後面剩下的n-2級台階的跳法數目,即為f(n-2)。因此n級台階時的不同跳法的總數f(n)=f(n-1)+(f-2)。
long long fibonacci_solution1(unsigned int n)
; if(n < 2)
return result[n];
return fibonacci_solution1(n - 1) + fibonacci_solution1(n - 2);
}
/*
下面介紹一種時間複雜度是o(logn)的方法:
對於斐波那契數列1,1,2,3,5,8,13…….有如下定義:
f( n ) = f( n-1 ) + f( n-2 )
f( 1 ) = 1
f( 2 ) = 1
矩陣形式:
[ f( n+1 ) , f( n ) ] = [ f( n ) , f( n-1 ) ] * q 其中 [ f( n+1 ) , f( n ) ]為行向量,q = 為矩陣,則 [ f( n+1 ) , f( n ) ]=[ 1 , 0 ] * qn , */
struct matrix
}; matrix matrixmultiply ( const matrix & m1, const matrix & m2 )
matrix matrixpower( unsigned int n )
else if(n % 2 == 0)
else if( n % 2 == 1 )
return m;
} long long fibonacci( unsigned int n )
; if( n < 2 )
return result[ n ];
matrix q = matrixpower( n - 1 ); //注意:按定義式應該用[ 1, 0 ]*q, 或者等價於*q, 但是因為顯然結果相同,所以略去這一步。
return q.m_00;
}
筆試面試題之遞迴
1.字串的全排列。全排列就是從第乙個數起每個數分別與它後面的數交換。遞迴實現 從集合中依次選出每乙個元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理,從而得到所有元素的全排列。以對字串abc進行全排列為例,我們可以這麼做 以abc為例 固定a,求後面bc的排列 abc,acb,求...
筆試面試題
1 昨天參加一公司筆試,給幾道演算法題整懵了,其實也不難,但好久沒有碰演算法,只是有思路,要讓我在這麼短的時間內寫出程式來還是不行。2 這裡將其中一道稍微複雜一點的演算法題寫下來,以此小結。3 4 題目描述 5 將n個雞蛋放入到m個籃子中去 n m 保證每個籃子中至少乙個雞蛋,然後指定乙個數x,要求...
面試題 筆試
題1 有如下資料庫表tab 請用乙個 delete 語句,刪除 value 重複的行,每個 value 只保留 id 最小的一行。delete from tab where id notin select from select min id from tab groupby value a 好像有...