剑指 Offer 46. 把数字翻译成字符串
题目:
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
提示:
0 <= num < 231
代码:
1 //采用回溯法,选择的是子集树+递归,因为存在1位或者2位转换,所有有两种可能性 2 class Solution { 3 static int count=0; 4 static StringBuilder sb=null; 5 public int translateNum(int num) { 6 count=0; 7 String s=String.valueOf(num); 8 sb=new StringBuilder(); //这是为了统计所有的字符串,题目不要求可以不写,所有sb行都可删除 9 fun(s,0); 10 return count; 11 } 12 13 public void fun(String s,int t){ 14 int len=s.length(); 15 if(t>=len){ 16 count++; 17 } else{ 18 //第一种可能性,必然存在,无需判断 19 sb.append((char)((s.charAt(t)-'0')+97)); 20 fun(s,t+1); 21 sb.deleteCharAt(sb.length()-1); 22 //第二种可能性,第一位不为0且两位小于26,也可以转换 23 if(t<len-1&&s.charAt(t)!='0'){ 24 int i=s.charAt(t)-'0'; 25 int j=s.charAt(t+1)-'0'; //数值变字符,1+'0'即可,0的码值为48,也可1+48变成'1'; 26 if(i*10+j<26){ 27 sb.append((char)((i*10+j)+97)); //数值变字符,A的码值为65,a的码值为97;此处(i*10+j)+'a')也可以 28 fun(s,t+2); //已转换2位,所以t+2 29 sb.deleteCharAt(sb.length()-1); 30 } 31 } 32 } 33 } 34 }
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术