C# mysql 插入資料 中文亂碼解決方法
阿新 • • 發佈:2021-01-13
技術標籤:java演算法
題目 劍指 Offer 46. 把數字翻譯成字串
給定一個數字,我們按照如下規則把它翻譯為字串:0 翻譯成 “a” ,1 翻譯成 “b”,……,11 翻譯成 “l”,……,25 翻譯成 “z”。一個數字可能有多個翻譯。請程式設計實現一個函式,用來計算一個數字有多少種不同的翻譯方法。
示例 1:
輸入: 12258
輸出: 5
解釋: 12258有5種不同的翻譯,分別是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”
提示:
0 <= num < 231
思路
f(i) = f(i - 1) + f(i - 2),如果當前字元和下一個字元數值在10和25之間,解釋:f(i)為當前方案數,等於f(i-1)的方案數加f(i - 2)的,僅當如果當前字元和下一個字元數值(如14,為1 4 或14)在10和25之間;否則f(i) = f(i - 1)
複雜度分析
時間:O(logn)
空間: O(1)
程式碼
class Solution {
public int translateNum(int num) {
// int[] dp = new int[32];
// int i = 0;
// dp[0] = 1;
// int num1 = num % 10;
// int num2 = (num / 10) % 10;
// if(num >= 10 && (num2 == 1 || (num2 == 2 && num1 < 6))) {
// dp[++i] = 2;
// } else {
// dp[++i] = 1;
// }
// num = num / 10;
// i++;
// for(; num > 0; ++i) {
// num1 = num % 10;
// num2 = (num / 10) % 10;
// if(num2 == 1 || (num2 == 2 && num1 < 6)) {
// dp[i] = dp[i - 1] + dp[i - 2];
// } else {
// dp[i] = dp[i - 1];
// }
// num = num / 10;
// }
// return dp[i - 1];
// dp[1] = 1;
// i = 2;
// int num1, num2;
// for(; num > 0; ++i) {
// num1 = num % 10;
// num2 = (num / 10) % 10;
// if(num2 == 1 || (num2 == 2 && num1 < 6)) {
// dp[i] = dp[i - 1] + dp[i - 2];
// } else {
// dp[i] = dp[i - 1];
// }
// num = num / 10;
// }
// return dp[i - 1];
// 優化 迴圈陣列
int p = 1, q = 1, r = 1;
int num1, num2;
for(; num > 0; ) {
num1 = num % 10;
num2 = (num / 10) % 10;
if(num2 == 1 || (num2 == 2 && num1 < 6)) {
r = q + p;
} else {
r = q;
}
num = num / 10;
p = q;
q = r;
}
return r;
}
}