Leetcode: Decode ways

/*每次对于当前的字符判断是否属于1-9(0肯定不行,因为0不在1-26中),如果属于,那么当前的字符可以被decode,并且和f[n-1]组合,f[n] += f[n-1]
然后对于当前字符和前一个字符组成的字符串判断是否属于10-26,如果属于,那么这两个字符可以被decode,并且和f[n-2]组合,f[n] += f[n-2]
*/

 题意是1-26对应于A-Z,这样一个数字字符串可以解码成只包含A-Z的字符串。例如,12可以解码成AB,也可以解码成L。这样12就有两种解码方式。实现numDecodings(string s)接受数字字符串,返回可以解码的方式数。

public int numDecodings(String s) {
        if (s == null || s.length() == 0) {
			return 0;
		}
		int[] temp = new int[s.length()];
		for(int i=0;i<s.length();i++){
			temp[i]=0;
		}
		if (check(s.charAt(0))==1)
			temp[0] = 1;
		else
			temp[0] = 0;
		if (s.length() == 1) {
			return temp[0];
		}
		
		temp[1] = (check(s.charAt(0))&check(s.charAt(1)))+check(s.charAt(0),s.charAt(1));
		for (int i = 2; i < s.length(); i++) {
			if(check(s.charAt(i))==1)
				temp[i] += temp[i-1];
			if(check(s.charAt(i-1),s.charAt(i))==1)
				temp[i] += temp[i-2];
		}
		return temp[s.length() - 1];
    }
    public int check(char c){
		return (c!='0')?1:0;
	}
	public int check(char c1 , char c2){
		return (c1=='1'||(c1=='2'&&c2<='6'))?1:0;
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值