!!Day28_93复原IP地址_78子集_90子集Ⅱ

93 复原IP地址

  1. ip地址有四个数字片段,在树高为4的时候需要停止,用小数点pointNum的个数表示,如果小数点已经有三个了,则表示即将结束。
  2. ip的数据段的合法性判断:数字在0-255,如果非0第一个数字不能是0,数据段之间用 . 分隔。
  3. 在合法的数据段后面加入 . :字符串的操作,在某个位置插入一个字符s.insert(),删除一个字符s.erase()。
  4. 回溯的三部曲:
  • 参数和返回值:参数s即提供原来的字符串,又生成ip;参数startIndex指明开始遍历位置;参数pointNum指出现在已经加入小数点的个数,有利于表示结束条件。
  • 终止条件:pointNum == 3
  • 单层逻辑:借助for循环中的i生成[startIndex, i]的字符串,字符串合法在后面加入’.'并且从小数点后面的第一个字符开始纵向遍历。

78 子集

  1. 与n个数中取k个为集合的不同在于,result中保存的不是到达叶子的值,而是树枝。有多少个树枝,就需要在result中保存几项。
  2. 回溯三部曲:
  • 返回值和参数:参数nums作为提供基础的数据,startIndex表示本次开始的位置。
  • 终止条件:剩余集合为空表示到达叶子节点。
if(startIndex == nums.size()) return;
  • 单层逻辑:
for(int i = startIndex; i< nums.size(); i++){
	path.push_back(nums[i]);
	result.push_back(path); //保存树的每一个分支(不同之处)
	backtracking(nums, i+1);
	path.pop_back();//回溯
}

90 子集Ⅱ

  1. 树层去重的操作
  2. 递归三部曲:
  • 参数和返回值:nums和startIndex。
  • 终止条件:集合为空
if(startIndex == nums.size()) return;
  • 单层逻辑
for(int i = startIndex; i < nums.size(); i++){
	if(i > 0 && nums[i] == nums[i-1] && i > startIndex) continue;//同层出现相同元素,为避免重复,退出
	path.push_back(nums[i]);
	result.push_back(path);//保存树的每一个分支
	backtracking(nums, i+1);
	path.pop_back();
}
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值