把数字翻译成字符串

题目:给定一个数字,我们按照如下规则把它翻译为字符串;0翻译成“a”,1翻译成“b”,…
11翻译成“l”,…,25翻译成“z”.一个数字可能有多个翻译。例如,12258有5种不同的翻译,分别是“bccfi” “bwfi” “bczi” “mcfi” “mzi” 请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

思路:递归从最大的问题开始自上而下解决问题,我们也可以从最小的子问题开始自下而上解决问题,这样就可以消除重复的子问题,也就是说,我们从数字的末尾开始,然后从右到左翻译并计算不同翻译的数目。下面是参考代码:

package cn.yu.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		System.out.println(getTranslationCount(12258));
	 
  }
	static int getTranslationCount(int number) {
		if(number<0) return 0;
		String numberString = String.valueOf(number);
		return getTranslationCount(numberString);
				
	}
	private static  int getTranslationCount(String s) {
		int length = s.length();
		int [] counts = new int[length];
		int count = 0;
		for(int i = length-1;i>=0;i--) {
			count = 0;
			if(i<length-1) {
				count = counts[i+1];	
			}else count =1;
			
			if(i<length-1) {
				int digit1 = s.charAt(i) - '0';
				int digit2 = s.charAt(i+1) - '0';
				int converted = digit1*10+digit2;
				if(converted>=10 && converted<=25) {
					if(i<length-2) {
						count+=counts[i+2];
					}else count+=1;
				}
				
			}
			counts[i] = count;
		}
		count = counts[0];
		return count;
	}
}

运行结果:5

你可能感兴趣的:(算法学习)