力扣刷题记录7

本文记录了力扣刷题过程,包括279. 完全平方数问题,作者提到该题解使用动态规划,类似于背包问题;另一个题目涉及字符串排序,通过统计字符出现次数进行排序。

力扣刷题记录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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值