当前位置: 首页 > wzjs >正文

佛山专业做企业网站seo应该如何做

佛山专业做企业网站,seo应该如何做,网页设计制作与代码整体素材,dw做的网站链接目录 问题描述解决思路 回溯法剪枝优化 代码实现复杂度分析示例测试总结与扩展 1. 问题描述 给定两个整数 k 和 n,要求找出所有满足以下条件的组合: 组合包含 k 个不同的数字。组合中数字的和等于 n。组合中的数字范围为 [1, 9],且每个数字…

目录

  1. 问题描述
  2. 解决思路
    • 回溯法
    • 剪枝优化
  3. 代码实现
  4. 复杂度分析
  5. 示例测试
  6. 总结与扩展

1. 问题描述

给定两个整数 kn,要求找出所有满足以下条件的组合:

  • 组合包含 k 个不同的数字
  • 组合中数字的和等于 n
  • 组合中的数字范围为 [1, 9],且每个数字只能使用一次。

示例:

  • 输入:k = 3, n = 7
  • 输出:[[1, 2, 4]]
  • 解释:1 + 2 + 4 = 7,且没有其他满足条件的三元组。

2. 解决思路

2.1 回溯法

回溯法是解决组合问题的经典方法。其核心思想是:

  1. 递归生成候选解:从候选数字中逐个尝试添加元素。
  2. 剪枝:当发现当前路径无法生成有效解时,提前终止递归。
  3. 回溯撤销选择:在递归返回后,撤销最后一步选择,尝试其他可能性。

2.2 剪枝优化

为了提升算法效率,需要设计剪枝条件:

  1. 总和超过目标值:若当前路径的和已超过 n,停止递归。
  2. 剩余数字不足:若剩余可选的数字不足以填满组合的剩余位置,停止递归。
  3. 避免重复组合:按升序选择数字,确保组合唯一。例如,选择 [1, 2, 4] 后不会生成 [2, 1, 4]

3. 代码实现

import java.util.ArrayList;
import java.util.List;class Solution {public List<List<Integer>> combinationSum3(int k, int n) {List<List<Integer>> result = new ArrayList<>();backtrack(result, new ArrayList<>(), 1, k, n, 0);return result;}private void backtrack(List<List<Integer>> result,List<Integer> path,int start,int k,int n,int currentSum) {// 终止条件:路径长度等于kif (path.size() == k) {if (currentSum == n) {result.add(new ArrayList<>(path));}return;}// 计算当前可以选择的数字的最大起始值int remaining = k - path.size();int maxPossible = 10 - remaining; // 确保剩余数字足够填充剩余位置maxPossible = Math.min(maxPossible, 9); // 不超过9for (int i = start; i <= maxPossible; i++) {// 剪枝:总和超过n时提前终止if (currentSum + i > n) break;path.add(i);backtrack(result, path, i + 1, k, n, currentSum + i); // 递归下一层path.remove(path.size() - 1); // 回溯撤销选择}}
}

关键代码解释

  • backtrack 方法参数

    • result:存储所有合法组合的结果集。
    • path:当前递归路径上的数字组合。
    • start:当前可选的起始数字(避免重复)。
    • k, n:题目输入的条件。
    • currentSum:当前路径的数字和。
  • 剪枝条件

    • maxPossible = 10 - remaining:确保剩余的数字足够填充组合的剩余位置。例如,若还需选2个数字,则起始数字最大为 8(因为 8, 9 是最后两个可选数字)。

4. 复杂度分析

  • 时间复杂度:最坏情况下需要遍历所有组合,时间复杂度为 O(C(9, k)),即从9个数字中选k个的组合数。
  • 空间复杂度:递归调用栈深度为 k,空间复杂度为 O(k)

5. 示例测试

示例 1

输入:k = 3, n = 7
输出:[[1, 2, 4]]

示例 2

输入:k = 4, n = 1
输出:[]
解释:无法找到4个不同的数且和为1

6. 总结与扩展

  • 回溯法的适用性:适合解决组合、排列、子集等问题,通过递归和剪枝平衡效率。
  • 剪枝优化的重要性:合理剪枝可以显著减少无效递归路径。
  • 扩展问题
    • 组合总和 I(数字可重复使用)
    • 组合总和 II(包含重复数字但不可重复使用)

核心收获:通过升序选择数字避免重复,通过预计算最大起始值减少无效遍历。

http://www.dtcms.com/wzjs/251173.html

相关文章:

  • wordpress 的图片保存在哪东莞网络推广及优化
  • 济南网站建设cnwenhui网络营销心得体会800字
  • 公司网站设计制作公司百度竞价排名黑幕
  • 做啪啪网站建立营销型网站
  • 深圳南山建设局官方网站seo网站推广公司
  • xp做网站服务器吗下载百度官方版
  • unity3d做网站网站推广的途径和方法
  • 医疗设备公司的网站怎么做优化网站打开速度
  • 做网站的步骤是什么seo全网推广营销软件
  • 网络推广目标怎么写seo人才招聘
  • 购物网站含有哪些模块链接点击量软件
  • 网站首页banner怎么做百度关键词怎么做排名
  • pageadmin仿站教程少女长尾关键词挖掘
  • 百度站内搜索提升关键词排名百度推广价格
  • 中考复读学校网站怎么做谷歌优化
  • wordpress建m域名网站seo排名关键词点击
  • 网站每年的维护费我想做网络推广
  • 博星卓越营销网站设计网络推广公司怎么找客户
  • 贵阳网站建设q479185700惠私人网站服务器
  • 帮您做网站网上代写文章一般多少钱
  • 嘉兴市做外贸网站宁波免费seo排名优化
  • 如何做网站服务器东莞网站建设公司排名
  • 北京做网站软件网站友情链接
  • 做的网站百度上可以搜到吗站外推广平台有哪些
  • 浦项建设中国有限公司网站大片ppt免费下载安装
  • 阿拉善盟网站制作爱站网挖掘词
  • Myeclipse怎么做网站360排名优化工具
  • 做百度网站排名软件2022十大网络营销案例
  • 职工素质建设 网站站内关键词自然排名优化
  • 网站做百度权重排名论坛新网站推广方案