88合并两个数组
//此题直接把数组二加在数组一的后面,然后在排序
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i=0;i<n;i++){
nums1[m+i]=nums2[i];
}
Arrays.sort(nums1);
}
}
91解码方法
//此题使用动态规划,因为不同的数字有不同的解码,当一些数字可以被解码成两种情况,第一种情况为解码成A~I的某个字符,我们要算f[i]的个数时,我们要知道f[i-1]的个数(初始f[0]=1),第二种情况为使用了两个字符来编码即当前面一个字符不为0,且前面字符转换成数字*10+后面字符转换成数字<26,这样看剩余前i-2个字符的次数就为 f[i-2],动态转移方程就可以写成 f[i] += f[i - 2];返回f[n]就是解码次数(此题解释十分潦草没有深刻理解动态规划,等后面再来解释)
class Solution {
public int numDecodings(String s) {
int n=s.length();
int [] f=new int[n+1];
f[0]=1;
for(int i=1;i<=n;i++){
if(s.charAt(i-1)!='0'){
f[i]=+f[i-1];
}
if(i>1&&s.charAt(i-2)!='0'&& ((s.charAt(i - 2) - '0') * 10 + (s.charAt(i - 1) - '0') <= 26)) {
f[i]+=f[i-2];
}
}
return f[n];
}
}