zoukankan      html  css  js  c++  java
  • [程序员代码面试指南]递归和动态规划-数字字符串转换为字母组合的种数(DP)

    题意

    给一个字符串,只由数字组成,若是'1'-'26',则认为可以转换为'a'-'z'对应的字母,问有多少种转换方法。

    题解

    状态转移很好想,注意dp多开一位,dp[0]为dp[2]的计算做准备。dp[i]表示到索引为i-1的字符(含)为止转换方法数。

    代码

    public class Main {
    	public static void main(String args[]) {
    		String str="01";
    		System.out.print(transMeans(str));
    	}
    	
    	public static int transMeans(String str) {
    		if(str==null||str.length()==0) {
    			return 0;
    		}
    		
    		int[] dp=new int[str.length()+1];
    		dp[0]=1;
    		dp[1]=str.charAt(0)=='0'?0:1;		
    		
    		if(str.length()!=1) {
    			for(int i=2;i<=str.length();++i) {
    				dp[i]=dp[i-1]*isLetter(str.charAt(i-1))+dp[i-2]*isLetterWithTwoNum(str,i-1);
    			}
    		}		
    		return dp[str.length()];
    	}
    	
    	public static int isLetter(char c) {
    		return c!='0'?1:0;
    	}
    	
    	public static int isLetterWithTwoNum(String s,int i) {
    		int num=(s.charAt(i-1)-'0')*10+s.charAt(i)-'0';
    		return num>=1&&num<=26&&s.charAt(i-1)!='0'?1:0;
    	}
    }
    
    
  • 相关阅读:
    title中的小图标
    JS
    浏览器的差距
    浏览器的前缀
    布局
    。。。 付解决浏览器兼容问题的两种方法
    form标签
    position讲解
    标题文档流与浮动
    css层叠问题
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/11080141.html
Copyright © 2011-2022 走看看