java的实用方法
- System.arraycopy(来,begin,去,begin,length)
- Character.isLetterOrDigit(ch) 是字母或者数字返回true,不是返回false
需要注意的特殊情况
- 当遇到有关数字转化的问题时,要考虑Integer的边界问题
二分查找
- mid = left+(right-left)/2 相较于 mid = (left+right)/2 避免了整型溢出的情况
- 因为 / 向下取整的特性,所以存在 mid取不到right的情况。所以二分查找区间划分的时候:right=mid,而不是mid-1。
回溯算法
全排列问题
伪代码:
result = []
def backtrack(路径,选择列表):
if 满足结束条件:
result.add(路径)
return
#因为需要在同一条件的同一级去重 这个是精髓
Set<Character> set=new HashSet<>();
for 选择 in 选择列表:
if(set.contains) continue
做选择
backtrack(路径,选择列表)
撤销选择
- 先做for循环 在循环里面先做选择 后递归 再撤销 原因:每个位置都可以出现在第一位,然后再加第二位… 所以是for里面递归
- set的位置很重要,因为其实去重的本质是在同一个index位置去重,所以 创建set对象的位置应该在for循环上面