试了很多次 ,但是好多都失败了,有些可能思路不对,有些可能内存爆了,运行时间超时。
我是基于这么一个思路,如果两个字符串str1,str2拼接在一起,那么怎么算产生的结果呢,应该是str1的数量*str2的数量 + str1.substring(0,str1.length-1)的数量 * str2.substring(1,str2.length)的数量*(str1.charAt(str1.length()-1)+str2.chatAt(0))的数量。
import java.util.*; public class Solution { /** * 解码 * @param nums string字符串 数字串 * @return int整型 */ public int solve (String nums) { // write code here int[] myInt = new int[nums.length()]; ArrayList<String> goodString = new ArrayList<String>(); for(int i = 1; i<= 26; i++){ goodString.add(""+i); } if(goodString.contains(""+nums.charAt(0))){ myInt[0] = 1; } else{ myInt[0] = 0; } for(int i = 1; i<nums.length(); i++){ int left = 0; if(goodString.contains(""+nums.charAt(i))){ left = 1; // System.out.println(nums.charAt(i)); } int right = 0; if(i - 2< 0){ right = 1; } if(i-2>=0){ right = myInt[i-2]; } int n1 = left*myInt[i-1]; int n2 = 0; if(goodString.contains(""+nums.charAt(i-1) + nums.charAt(i))){ n2 = 1; } int n3 = n2*right; //System.out.println(""+n3); myInt[i] = n1 + n3; } return myInt[myInt.length - 1]; /* int[] myInt = new int[nums.length()]; myInt[0] = 1; ArrayList<String> goodString = new ArrayList<String>(); for(int i = 1; i<= 27; i++){ goodString.add("" + i); } for(int i = 1; i< nums.length(); i++){ myInt[i] = myInt[i-1] ; if(!goodString.contains(""+ nums.charAt(i-1)+nums.charAt(i)) && !goodString.contains(""+nums.charAt(i))){ return 0; } if(goodString.contains(""+ nums.charAt(i-1)+nums.charAt(i)) && goodString.contains(""+nums.charAt(i))){ myInt[i] = myInt[i] + 1; } } return myInt[myInt.length - 1]; */ /* if(nums.length() == 0){ return 1; } if(nums.length() == 1){ if(goodString.contains(nums)){ return 1; } else{ return 0; } } int n1 = 0; int n2 = 0; String s = "" + nums.charAt(0); if(goodString.contains(s)){ n1 = solve(nums.substring(1)); } s=s+nums.charAt(1); if(goodString.contains(s)){ n2 = solve(nums.substring(2)); } return n1+n2; */ } /* ArrayList<String> goodString = new ArrayList<String>(); Solution(){ for(int i = 1; i<= 26; i++){ goodString.add("" + i); } } */ }