原创 Spiral Matrix

難度:1 1Y又失敗。。 解法:模擬。。 class Solution { public: const int LEFT=0; const int RIGHT=1; const int DOWN=2; const int UP=

原创 Gray Code

難度:2 解法: 這題的價值在於有一個結論 二進制數n 對應的格雷碼n^(n>>1) class Solution { public: vector<int> grayCode(int n) { vec

原创 水王擴展

問題出自編程之美 有三個發帖很多的ID,發帖數目都超過了總數的1/4,快速找到這三個ID 一開始想着證明每次刪除四個不同的ID後,這三個ID佔的百分比仍超過1/4,後來證明失敗 實際上以上證明是沒有意義的 每次選取四個不同的ID刪去,最後

原创 Merge Sorted Array

難度:2 解法: 歸併,如果是按照從小到達從左往右插入A數組,勢必要新增一個臨時的數組 換成從大到小從右往左,就可以省掉這部分空間 class Solution { public: void merge(int A[], int

原创 Unique Paths

難度:2 DP入門題,挺水的 dp[i][j]表示i,j到終點的方法數 dp[i][j]=dp[i+1][j]+dp[i][j+1] A robot is located at the top-left corner of a m x

原创 Submission Details

難度:2 一開始的想法是用二進制位表示行列是否應該清空,- -題目沒給行列的範圍,不好猜 標準解法是把標誌位放在第一行,第一列數上 第一行,第一列的數若爲0則代表該行/列應被置0 此外維護兩個標記,標記第一行第一列是否應該被清空 Gi

原创 原碼,補碼,反碼與位運算

原碼,補碼與反碼 例子:-13,二進制爲-1101,使用一個字節表示 原碼:10001101 補碼:11110011 反碼:11110010 原碼轉反碼: 正數的反碼與原碼相同,如13的原碼爲00001101,反碼爲00001101 負數

原创 1的數目

問題出自編程之美 給定一個十進制正整數N,寫下從1開始,到N的所有整數,然後數一下其中出現的所有1的個數 解法: 設正整數N,a1a2a3...an爲其十進制數表示 出現的所有1的個數,等於a1,a2,a3....an上出現的所有的1的個

原创 Combination Sum II

難度:2 還是DFS裸搜,1Y失敗了 Given a collection of candidate numbers (C) and a target number (T), find all unique combinations

原创 Edit Distance

難度:2 求編輯距離。。。 opt[i][j]表示word1的前i個字符與word2的前j個字符的editdistance word1[i-1] == word2[j-1]  opt[i][j]=opt[i-1][j-1] word1[i

原创 螞蟻爬杆

問題出自編程之美。 本文主要針對擴展 擴展1:第i個螞蟻,什麼時候走出木杆 思路來自http://lam8da.sinaapp.com/?p=11 假設螞蟻從左至右編號爲1到n,一共n只螞蟻 設每隻螞蟻都揹着一袋糧食,也從左至右編號爲1到

原创 C++中的const

這兩天看了各種const使用,寫篇總結理理,以下代碼使用g++ 4.7編譯 const的基本使用 定義const對象 #include<iostream> int main() { const int a=5; a=7;

原创 精確表達浮點數

問題出自編程之美 如何將無限循環小數表示成分數 這裏只考慮 0.a1a2...ana1a2....an........的情況 a1a2...an爲循環節 設N=0.a1a2....an N*10^n=a1a2...an+N 得 N(10^

原创 最大公約數問題

問題與解法均出自編程之美 求兩數A和B的最大公約數 輾轉相除法因爲有模運算,所以摒棄不用 分析a和b 若a和b均爲偶數,則a和b的最大公約數f(a,b)=2*f(a>>1,b>>1) 若a和b爲一奇一偶,設a爲偶,則a和b的最大公鑰數f(

原创 找符合條件的整數

問題出自編程之美,感覺書上講的比較晦澀,本人最喜歡通過例子來學習了 問題:給定一個正整數N,求一個最小的正整數M,使得N*M的十進制表示形式裏只有1和0 這裏分析N=13的情況 由於N*M比M有特徵,所以從N*M入手 設ans=N*M 當