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

成都建设诚信网站系统搭建方案

成都建设诚信网站,系统搭建方案,做网站 就上凡科建站,网站建设开发设计公司文章目录 DP1 斐波那契数列法1&#xff1a;递归法2&#xff1a;动态规划法3&#xff1a;优化空间复杂度 2.分割连接字符串3. 给定一个字符串s和一组单词dict&#xff0c;在s中添加空格将s变成一个句子 DP1 斐波那契数列 法1&#xff1a;递归 // 递归 #include <iostream>…

文章目录

  • DP1 斐波那契数列
    • 法1:递归
    • 法2:动态规划
    • 法3:优化空间复杂度
  • 2.分割连接字符串
  • 3. 给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子

DP1 斐波那契数列

在这里插入图片描述
在这里插入图片描述

法1:递归

// 递归
#include <iostream>
using namespace std;int Fibonacci(int n)
{if(n == 0) return 0;if(n == 1) return 1;return Fibonacci(n - 1) + Fibonacci(n - 2);
}
int main() {int a;while (cin >> a) { // 注意 while 处理多个 caseint b = Fibonacci(a);cout << b << endl;}
}

法2:动态规划

// DP
#include <iostream>
using namespace std;int Fibonacci(int n)
{//创建一个数组,保存中间状态的解int* F = new int[n + 1];//初始化F[0] = 0; F[1] = 1;//状态公式:F[i] = F[i - 1] + F[i - 2];for(int i = 2; i < n + 1; i++){F[i] = F[i - 1] + F[i - 2];}return F[n];
}
int main() {int a;while (cin >> a) { // 注意 while 处理多个 casecout << Fibonacci(a) << endl;}
}

法3:优化空间复杂度

#include <iostream>
using namespace std;int Fibonacci(int n)
{//状态公式:F[i] = F[i - 1] + F[i - 2];//优化空间复杂度 O(n) -> O(1)if(n == 0) return 0;if(n == 1) return 1;int fn = 0, f0 = 0, f1 = 1;for(int i = 2; i < n + 1; i++){fn = f0 + f1;//更新中间状态f0 = f1;f1 = fn;}return fn;
}
int main() {int a;while (cin >> a) { // 注意 while 处理多个 casecout << Fibonacci(a) << endl;}
}

在这里插入图片描述

2.分割连接字符串

1、给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。

例如:
给定s=“leetcode”;
dict=[“leet”, “code”].
返回true,因为"leetcode"可以被分割成"leet code".

#include <vector>
#include <string>
#include <unordered_set>
using namespace std;bool wordBreak(string s, unordered_set<string>& dict) {// 检查输入是否有效if (s.empty() || dict.empty()) {return false;}// 动态规划数组,flag[i]表示s的前i个字符是否可以被拆分vector<bool> flag(s.length() + 1, false);flag[0] = true; // 空字符串可以被拆分// 遍历字符串的每个位置for (int i = 1; i <= s.length(); i++) {// 从i-1向前遍历到0for (int j = i - 1; j >= 0; j--) {// 如果前j个字符可以被拆分,且从j到i的子字符串在字典中if (flag[j] && dict.find(s.substr(j, i - j)) != dict.end()) {flag[i] = true;break; // 当前位置可以被拆分,跳出内层循环}}}// 返回整个字符串是否可以被拆分return flag[s.length()];
}

3. 给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子

这段代码实现了回溯法(深度优先搜索,DFS)来生成所有可能的单词拆分结果。
2、给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子,使得句子中的每一个单词都是dict中的单词

返回所有可能的结果

例如:给定的字符串s =“catsanddog”,

dict =[“cat”, “cats”, “and”, “sand”, “dog”].

返回的结果为[“cats and dog”, “cat sand dog”].

#include <vector>
#include <string>
#include <unordered_set>
using namespace std;class Solution {
public:vector<string> wordBreak(string s, unordered_set<string>& dict) {vector<string> result;DFS(s, dict, s.length(), "", result);return result;}private:void DFS(const string& s, const unordered_set<string>& dict, int index, string str, vector<string>& result) {// 如果索引小于等于0,说明已经处理完整个字符串if (index <= 0) {if (!str.empty()) {// 去掉最后一个多余的空格,并将结果加入到结果列表中result.push_back(str.substr(0, str.length() - 1));}return;}// 从当前索引向前遍历,寻找可以拆分的单词for (int i = index; i >= 0; i--) {// 检查从i到index的子字符串是否在字典中if (dict.find(s.substr(i, index - i)) != dict.end()) {// 将当前单词加入到路径中,并继续递归处理DFS(s, dict, i, s.substr(i, index - i) + " " + str, result);}}}
};
http://www.yayakq.cn/news/700885/

相关文章:

  • 神华两学一做网站网站建设卖给别人可以吗
  • 专注东莞微信网站设计远程管理wordpress站群
  • 企业网站程序带wapwordpress手机验证码插件
  • 青岛网站制作wordpress图文安装教程
  • 天津公司网站郑州工商注册
  • 境外公司在国内建网站政法网站建设有哪些不足
  • 常州网站推广培训罗湖网站 建设深圳信科
  • 增城免费网站建设域名 网址 网站名称
  • 电商美工素材网站厦门建站方案
  • 网站建设合同附件格式分析网站推广和优化的原因
  • 网站建设框架模板下载河北网络公司网站建设
  • 沃尔玛官方网站查余额建筑网站推荐
  • 学校门户网站建设管理办法可以讨论网站建设的论坛
  • 丽水公司做网站注册公司网上申请流程
  • 怎么投放网络广告合肥网站优化
  • 搜关键词可以搜到的网站怎么做网站设计制造
  • 聊城 网站建设app企业微信下载
  • 薛城网站建设百度关键词搜索排名帝搜软件
  • 网站排名下降怎么办网站推广优化网址
  • 北京建网站的价格如何在网站上推广自己的链接
  • 如何免费制作一个公司网站wordpress备份 ftp
  • 中国建设银行官网站下载中心哪些网站可以做宣传
  • 七星彩网站开发公司安徽省住房建设厅网站
  • 福州门户网站建设必应搜索引擎怎么样
  • 响应式网站404页面怎么做怎么制作美篇教程
  • 公司自建网站企业网站建设的基本原则为
  • 秦皇岛网站制作 微商城建设中国建筑集团有限公司排名
  • 做网站 空间威海住房建设部官方网站
  • 做整站优化wordpress 图片站
  • 门户网站开发模板自己购买域名做网站