回溯和搜索的收获

本文探讨了如何简化动态规划解决回文串问题,通过代码示例说明如何利用二维数组初始化和状态转移方程。特别强调了对象赋值时引用的重要性。

131.分割回文串

二维数组向其中填写一些值。
可以简化一下代码。
Arrays.fill(arrayname,starting index, ending index,value);
比如boolean需要初始值为正确的写法。

Arrays.fill(arrayname ,starting index ,ending index ,value)

动态规划中,处理字符串的每一个子串是否是回文串:
转移状态的方程是:当i>=j 两个指针相等或者前指针超过了后指针。然后就是:两端的字符相等。

f=new boolean [n][n];
for(int i=0;i<n;i++){
     Arrays.fill(f[i],true);
 }


//动态规划处理字符串;
for(int i=n-1;i>=0;--i){
    for(int j=i+1;j<n;++j){
        f[i][j]=(s.charAt(i)==s.charAt(j))&&f[i+1][j-1];
    }
}

初始化状态数组是都是true
因为要用到f[i+1][j-1]
i在i+1之后,所以要用倒序。

对象的赋值问题,直接加入是对象的引用的赋值。

 	if(i==n){
          ret.add(new ArrayList<String>(ans));//看来对于一些对象的赋值问题还是的小心啊,时刻记得直接加入是对象的引用的赋值。
          return;
      }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值