当前位置: 首页 > news >正文

数据结构与算法--数字转字符串方法数

规定1对应A , 2对应B , 3对应C, 依此类推26对应Z。 那么一个数字字符串, 比如111就可以转化为AAA , KA, Ak.
给定一个只有数字字符组成的字符串str返回有多少种转化结果


public class Code02_ConvertToLetterString {
    // str只含有数字字符0~9
    // 返回多少种转化方案
    public static int number(String str) {
        int ans = process(str,0);
        return ans;
    }

    public static int process(String str, int index){
        if(index >= str.length()){
            return 1;
        }

        int a = 0;
        // 直接翻译
        if(str.charAt(index) != '0') {
            a = process(str, index+1);
        }

        // 使用下一个
        if((str.charAt(index) == '1' && (index+1) <str.length())
                ||
           (str.charAt(index) == '2' && (index+1) <str.length() && str.charAt(index+1) <= '6')) {
            a += process(str, index+2);
        }

        return a;
    }

    public static int dp(String str) {
        int[] dp = new int[str.length()+1];
        dp[str.length()] = 1;
        for (int i = dp.length-2; i >=0 ; i--) {

            int a = 0;
            // 直接翻译
            if(str.charAt(i) != '0') {
                a = dp[i+1];
            }

            if((str.charAt(i) == '1' && (i+1) <str.length())
                    ||
                    (str.charAt(i) == '2' && (i+1) <str.length() && str.charAt(i+1) <= '6')) {
                a += dp[i+2];
            }
            dp[i] = a;
        }

        return dp[0];
    }

    // 从右往左的动态规划
    // 就是上面方法的动态规划版本
    // dp[i]表示:str[i...]有多少种转化方式
    public static int dp1(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        char[] str = s.toCharArray();
        int N = str.length;
        int[] dp = new int[N + 1];
        dp[N] = 1;
        for (int i = N - 1; i >= 0; i--) {
            if (str[i] != '0') {
                int ways = dp[i + 1];
                if (i + 1 < str.length && (str[i] - '0') * 10 + str[i + 1] - '0' < 27) {
                    ways += dp[i + 2];
                }
                dp[i] = ways;
            }
        }
        return dp[0];
    }

    public static void main(String[] args) {
        String str = "2457245495310113452023";
        System.out.println(number(str));
        System.out.println(dp(str));
        System.out.println(dp1(str));
    }
}
http://www.dtcms.com/a/86417.html

相关文章:

  • 数据结构之栈(C语言)
  • RabbitMQ实现路由模式发送接收消息
  • “零拷贝”(Zero-Copy)技术详解以及使用场景
  • 内网渗透-端口转发
  • 【NLP 40、文本生成任务】
  • 【AI大模型】搭建本地大模型GPT-NeoX:详细步骤及常见问题处理
  • 通往自主智能之路:探索自我成长的AI
  • 图像处理全流程指南(OpenCV 实现)
  • 2025-03-23 学习记录--C/C++-C语言 sprintf()实现将多个值按指定格式拼接成字符串
  • 国产达梦(DM)数据库的安装(Linux系统)
  • 设计模式:创建型、结构型、行为型
  • Linux 系统运行 Android 应用的几种方案
  • 为什么EasyExcel能处理大数据量而不内存溢出,EasyExcel原理
  • Linux__之__基于UDP的Socket编程网络通信
  • LLaMA-Factory微调大模型
  • 网络爬虫-4:jsonpath+实战
  • 一个轻量级的 SQLite ORM 工具包
  • c++测试题
  • C# 反射(Reflection)详解
  • Java EE(16)——网络原理——TCP协议解析二
  • 深度解析历年蓝桥杯算法题,助力提升编程技能
  • ngx_http_core_server_name
  • 文献分享: ColXTR——将ColBERTv2的优化引入ColXTR
  • [动手学习深度学习]28. 批量归一化
  • AF3 Rotation类的map_tensor_fn 方法解读
  • Oracle 23ai Vector Search 系列之1 架构基础
  • RT-Thread CI编译产物artifacts自动上传功能介绍
  • python socket模块学习记录
  • KPMG 与 SAP Joule:引领 AI 驱动咨询的新时代
  • 什么情况下spring的事务会失效