在本题中,任何一个正整数都会由完全平方数1组成,所以不可能没有解。

贪心是不成立的,因为如果寻找12的完全平方数,使用贪心,则它由9,1,1,1四个数组成;但是最少的完全平方数是由三个4组成的。

4->3->2->1->0 之间相差1,这个完全平方数;

4->0 之间相差4,这个完全平方数。

class Solution {
public:
int numSquares(int n) {
//图的广度优先遍历
queue< pair<int, int> > q; //具体第几个数字;图中经历了几段路径到达这个数字
q.push(make_pair(n,)); //对于n这个数字,0步到达 vector<bool> visited(n+, false); //0 - n 这n+1个结点有没有被访问过
visited[n] = true; //n一开始已经被推入栈中了 while(!q.empty()){
//取出队首元素
int num = q.front().first; //这个数字是多少
int step = q.front().second; //走了几步
q.pop(); for(int i=; ; i++){
int a = num-i*i;
if(a<)
break;
if(a == )
return step+;
if(!visited[a]){ //当visited这个结点没有被访问过时,将它推入,避免重复计算
//说明除了i之外还能有一个完全平方数
q.push(make_pair(a, step+));
visited[a] = true;
}
}
}
throw invalid_argument("No Solution.");
}
};

class Solution {
public:
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
unordered_set<string> wordSet(wordList.begin(), wordList.end()); if(!wordSet.count(endWord)) //若给定单词列表没有endWord,返回
return ; queue<pair<string, int>> q;
q.push(make_pair(beginWord, )); while(!q.empty()){
string word = q.front().first;
int res = q.front().second;
q.pop(); if(word == endWord)
return res; for(int i=;i<word.size();i++){
string newWord = word;
for(char ch='a'; ch<='z';ch++){
newWord[i] = ch;
if(wordSet.count(newWord) && newWord!=word){
q.push(make_pair(newWord, res+));
wordSet.erase(newWord);
}
}
}
}
return ;
}
};

127这道题需要注意的是:如果不把vector里存储的数据用set来存,就会导致 time limited 的问题!!

class Solution {
public:
vector<vector<string>> findLadders(string beginWord, string endWord, vector<string>& wordList) { vector<vector<string>> res; //res保存最短路径 unordered_set<string> dict(wordList.begin(), wordList.end()); //dict保存单词列表 queue<vector<string>> paths; //保存所有可能路径
paths.push({beginWord}); int level = , minLevel = INT_MAX; //level存储当前路径,minLevel最短路径 unordered_set<string> words; //存储已经遍历过的单词 while(!paths.empty()){ vector<string> t = paths.front(); //队列中首路径
paths.pop(); if(t.size()>level){
//把已经遍历过的单词在dict中删除
for(string a:words) dict.erase(a);
words.clear(); //words清零 准备储存下一次遍历的单词
level = t.size(); //剪枝
if(level > minLevel)
break; } string last = t.back(); //last存储当前路径的最后一个单词
for(int i=; i<last.size();i++){
string newlast = last;
for(char ch ='a';ch<='z';ch++){
newlast[i] = ch;
if(!dict.count(newlast))
continue; //若dict中找不到这个单词,退出本次循环
words.insert(newlast); //插入到已遍历列表
vector<string> nextPath = t;
nextPath.push_back(newlast); if(newlast == endWord){
//先找到endWord的路径一定是最短的
res.push_back(nextPath);
minLevel = level;
}
else
paths.push(nextPath); }
}
} return res;
}
};

·

BFS和图的最短路径 279,127,126的更多相关文章

  1. 模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra

    广搜 bfs //bfs #include<iostream> #include<cstdio> using namespace std; ],top=,end=; ][]; ...

  2. 【bfs分层图 dp】hihocoder#1147 : 时空阵

    最短路径树上分层dp的一类套路吧 题目大意 幽香这几天学习了魔法,准备建造一个大型的时空传送阵. 幽香现在可以在幻想乡的n个地点建造一些传送门,如果她建造了从地点a与地点b之间的传送门,那么从a到b和 ...

  3. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  4. 数据结构 -- 图的最短路径 Java版

    作者版权所有,转载请注明出处,多谢.http://www.cnblogs.com/Henvealf/p/5574455.html 上一篇介绍了有关图的表示和遍历实现.数据结构 -- 简单图的实现与遍历 ...

  5. C++编程练习(11)----“图的最短路径问题“(Dijkstra算法、Floyd算法)

    1.Dijkstra算法 求一个顶点到其它所有顶点的最短路径,是一种按路径长度递增的次序产生最短路径的算法. 算法思想: 按路径长度递增次序产生算法: 把顶点集合V分成两组: (1)S:已求出的顶点的 ...

  6. python解决图的最短路径问题

    在hihoCoder上遇到一个算法题目,描述如下: 对图结构有了解的不难发现,这是经典的求图的最短路径问题.以下是python代码: def findMin(row): minL = max(row) ...

  7. c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法

    c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...

  8. 图的最短路径---迪杰斯特拉(Dijkstra)算法浅析

    什么是最短路径 在网图和非网图中,最短路径的含义是不一样的.对于非网图没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径. 对于网图,最短路径就是指两顶点之间经过的边上权值之和最 ...

  9. 数据结构(C#):图的最短路径问题、(Dijkstra算法)

    今天曾洋老师教了有关于图的最短路径问题,现在对例子进行一个自己的理解和整理: 题目: 要求:变成计算出给出结点V1到结点V8的最短路径 答: 首先呢,我会先通过图先把从V1到V8的各种路径全部计算下来 ...

随机推荐

  1. CSS文本溢出处理

    1.超出层的高度和宽度时文本自动隐藏 overflow:hidden;text-overflow:ellipsis; 2.超出层的宽度时隐藏溢出的文本以...表示,Firefox不兼容,只隐藏溢出的文 ...

  2. 在线创建MongoDB免费集群(MangoDB Atlas)

    MongoDB Atlas是MongoDB的云服务,构建在亚马逊的AWS上,MongoDB允许用户在上面创建一个免费集群作为学习使用. 1. 注册MongoDB cloud账号: 访问www.mong ...

  3. Yii2中ACF和RBAC

    ACF ( Access Control Filter) ACF ( Access Control Filter)官网的解释就是一个可以在模型或控制器执行行为过滤器,当有用户请求时,ACF将检查acc ...

  4. Yii2视频

    Yii2 视频分享 需要的小伙伴看过来链接: https://pan.baidu.com/s/1sl4H0RV 密码: nknx  (有问题请留言)

  5. plsql中查看sql执行计划

    想要优化sql语句,可以从sql执行计划入手. 在plsql客户端,提供了一个方便的按钮来查看执行计划 选中需要查看的sql语句,点击此按钮,就可以看到该条语句的执行计划了. 结果集包括描述,用户,对 ...

  6. 【连载】redis库存操作,分布式锁的四种实现方式[四]--基于Redis lua脚本机制实现分布式锁

    一.redis lua介绍 Redis 提供了非常丰富的指令集,但是用户依然不满足,希望可以自定义扩充若干指令来完成一些特定领域的问题.Redis 为这样的用户场景提供了 lua 脚本支持,用户可以向 ...

  7. linux内存布局------深入理解计算机系统

  8. day5学python 基础+装饰器内容

    基础+装饰器内容 递归特性# 1.必须有一个明确的结束条件# 2.每次进入更深一层递归时,问题规模相比上次递归应有所减少# 3.递归效率不高 def run(n): print(n) if int(n ...

  9. 20165219 2017-2018-2 《Java程序设计》第6周学习总结

    20165219 2017-2018-2 <Java程序设计>第6周学习总结 教材学习内容小结 第八章 String类 常用方法 public int length() 求字符串长度 pu ...

  10. [AGC005C]Tree Restoring 构造

    Description ​ 给出一个数组a,要求构造一颗树,使节点x距离最远的点的距离为\(a_x\). Input ​ 第一行一个正整数NN(2≤N≤1002≤N≤100) ​ 接下来一行,有NN个 ...