00509 斐波那契數
斐波那契數,一般用 F(n) 表示,造成的序列稱爲斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是:java
F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
給定 N,計算 F(N)。算法
示例 1:數組
輸入:2 輸出:1
解釋:F(2) = F(1) + F(0) = 1 + 0 = 1.bash
示例 2:微信
輸入:3 輸出:2
解釋:F(3) = F(2) + F(1) = 1 + 1 = 2.函數
示例 3:ui
輸入:4 輸出:3
解釋:F(4) = F(3) + F(2) = 2 + 1 = 3.
spa
提示:code
0 ≤ N ≤ 30
<!-- more -->遞歸
本題解由微信公衆號
小猿刷題
提供, 錯誤之處, 歡迎指正.
/** * 微信公衆號"小猿刷題" */ public int fib(int N) { if(N == 0){ return 0; } if(N == 1){ return 1; } return fib(N-2) + fib(N-1); }
/** * 微信公衆號"小猿刷題" */ public int fib(int N) { if(N == 0){ return 0; } if(N == 1){ return 1; } int [] arr = new int[N+1]; arr[0] = 0; arr[1] = 1; for(int i = 2; i <= N; i++){ arr[i] = arr[i-2] + arr[i-1]; } return arr[N]; }
/** * 微信公衆號"小猿刷題" */ public int fib(int N) { if(N == 0){ return 0; } if(N == 1){ return 1; } int a = 0; int b = 1; for(int i = 2; i <= N; i++){ int sum = a + b; a = b; b = sum; } return b; }
00344 反轉字符串
編寫一個函數,其做用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。
不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。
你能夠假設數組中的全部字符都是 ASCII 碼錶中的可打印字符。
示例 1:
輸入:["h","e","l","l","o"] 輸出:["o","l","l","e","h"]
示例 2:
輸入:["H","a","n","n","a","h"] 輸出:["h","a","n","n","a","H"]
本題解由微信公衆號
小猿刷題
提供, 錯誤之處, 歡迎指正.
經過異或交換字符串的高低位
/** * 微信公衆號"小猿刷題" */ public static String reverse(String source){ char[] chars = source.toCharArray(); int low = 0; int top = chars.length - 1; while (low < top){ chars[low] ^= chars[top]; chars[top] ^= chars[low]; chars[low] ^= chars[top]; low++; top--; } return new String(chars); }
將目標字符串從第一個字符到最後一個字符逆向追加
/** * 微信公衆號"小猿刷題" */ public static String reverse(String source) { int length = source.length(); String reverse = ""; for (int i = 0; i < length; i++) { reverse = source.charAt(i) + reverse; } return reverse; }
利用java集合內置算法翻轉
/** * 微信公衆號"小猿刷題" */ public static String reverse(String source) { return new StringBuffer(source).reverse().toString(); }
或者
/** * 微信公衆號"小猿刷題" */ public static String reverse(String source) { return new StringBuilder(source).reverse().toString(); }
利用棧先進後出的特色進行翻轉
/** * 微信公衆號"小猿刷題" */ public static String reverse(String source) { char[] chars = source.toCharArray(); Stack<Character> stack = new Stack<Character>(); for (char ch : chars) { stack.push(ch); } String target = ""; while (!stack.isEmpty()) { target += stack.pop(); } return target; }
使用遞歸進行左右交換
/** * 微信公衆號"小猿刷題" */ public static String reverse(String source) { int length = source.length(); if (length <= 1) { return source; } String left = source.substring(0, length / 2); String right = source.substring(length / 2, length); return reverse(right) + reverse(left); }
/** * 微信公衆號"小猿刷題" */ public static String reverse(String source) { char[] s = source.toCharArray(); int n = s.length - 1; int half = n / 2; for (int i = 0; i <= half; i++) { char temp = s[i]; s[i] = s[n - i]; s[n - i] = temp; } return new String(s); }
/** * 微信公衆號"小猿刷題" */ public static String reverse(String source) { char[] array = source.toCharArray(); String reverse = ""; for (int i = array.length - 1; i >= 0; i--) reverse += array[i]; return reverse; }