剑指 Offer 33. 二叉搜索树的后序遍历序列(递归)
因为后序遍历最后一个位置是根节点,又因为二叉平衡树左子树一定小于根节点,右子树一定大于根节点。
而左子树也是如此,右子树依旧有这个规律。
思路:找到第一个大于根节点的位置(右子树的开端)。
此指针从最左端开始,如果其对后能到达根节点位置,且递归的左右子树也满足,即return true;
剑指 Offer 42. 连续子数组的最大和(动规)
ans[i] = Math.max(nums[i], ans[i - 1] + nums[i]);//注意方程
max = Math.max(max, ans[i]);
剑指 Offer 45. 把数组排成最小的数
此题很有意思,其实质依旧是排序,重在怎么排。
public int compare(int i, int j) {
long x = i * (long)Math.pow(10, Integer.toString(j).length()) + j;
long y = j * (long)Math.pow(10, Integer.toString(i).length()) + i;
if(x < y) {
return -1;
}
else if(x > y) {
return 1;
}else {
return 0;
}
}
剑指 Offer 46. 把数字翻译成字符串
此题难在怎么想到是采用动态规划,以及其方程。
编程难点:
将给定的数组变成字符串
1、String src = String.valueOf(num);
2、String tmpStr = src.substring(i - 2, i);//左闭右开
3、if (tmpStr.compareTo("10") >= 0 && tmpStr.compareTo("25") <= 0) {
ans[i] = ans[i - 1] + ans[i - 2];
}else {
ans[i] = ans[i - 1];
}