力扣刷题记录7
1370. 上升下降字符串
今天的每日一题是一道简单题。就是看到这个题目就想到了一个暴力点的解法,先对字符串排序然后不断从前向后遍历和从后向前遍历,找出合适的串。但还是写了很久,主要是对stl的操作不太熟悉。
学习到了对字符串排序:sort(temp.begin(),temp.end());还有用迭代器反向遍历,需要注意应该使用for(string::reverse_iterator c=temp.rbegin();c!=temp.rend();)而不能用c=end(),c!=begin()。。。。。因为stl迭代器的end()是指向最后一个元素的下一个空位置的。此外,使用迭代器反向遍历时,删除元素时要用temp.erase((++c).base());因为迭代器是reverse_iterator,要做些转换。
此外,要注意删除后,即erase后迭代器指向的位置。
有关迭代器可以参考这篇文章:https://blog.csdn.net/u011391040/article/details/50433237?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160626958019725255549588%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160626958019725255549588&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-2-50433237.first_rank_ecpm_v3_pc_rank_v2&utm_term=%E5%8F%8D%E5%90%91%E9%81%8D%E5%8E%86%E5%88%A0%E9%99%A4%E5%85%83%E7%B4%A0%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E7%94%A8%2B%2B.base&spm=1018.2118.3001.4449
。。看到答案的桶计数感觉我是个笨比。。。以后记得一下数据量少的时候用桶排序桶计数吧。
class Solution {
public:
string sortString(string s) {
vector num(26);
for (char &ch : s) {
num[ch - ‘a’]++;
}
string ret;
while (ret.length() < s.length()) {
for (int i = 0; i < 26; i++) {
if (num[i]) {
ret.push_back(i + 'a');
num[i]--;
}
}
for (int i = 25; i >= 0; i--) {
if (num[i]) {
ret.push_back(i + 'a');
num[i]--;
}
}
}
return ret;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/increasing-decreasing-string/solution/shang-sheng-xia-jiang-zi-fu-chuan-by-leetcode-solu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
279. 完全平方数
不会做。。。
这个题解用的动态规划,类似背包问题,可以好好看看。
dp:中间解的结果来计算最终解,不会浪费已经得到的中间解。
要像计算机一样思考。
class Solution {
public int numSquares(int n) {
ArrayList<Integer> square_nums = new ArrayList<Integer>();
for (int i = 1; i * i <= n; ++i) {
square_nums.add(i * i);
}
Set<Integer> queue = new HashSet<Integer>();
queue.add(n);
int level = 0;
while (queue.size() > 0) {
level += 1;
Set<Integer> next_queue = new HashSet<Integer>();
for (Integer remainder : queue) {
for (Integer square : square_nums) {
if (remainder.equals(square)) {
return level;
} else if (remainder < square) {
break;
} else {
next_queue.add(remainder - square);
}
}
}
queue = next_queue;
}
return level;
}
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/perfect-squares/solution/wan-quan-ping-fang-shu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本文记录了力扣刷题过程,包括279. 完全平方数问题,作者提到该题解使用动态规划,类似于背包问题;另一个题目涉及字符串排序,通过统计字符出现次数进行排序。

1024

被折叠的 条评论
为什么被折叠?



