c++刷leetcode入门

本文介绍了一种解决24点游戏的算法实现,通过使用递归和排列组合的方法,判断给定的四个数字是否能通过加减乘除运算得到24。代码中详细展示了如何利用vector和sort进行数据操作,以及如何通过next_permutation生成所有可能的数字组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <vector>
// 这个必须加上,要不然报错
#include <iostream>
// 这个必须加上,要不然报错
#include <cmath>
// 这个必须加上,要不然报错

#include "leetcode279_24Game.h"

using namespace std;
// 这个必须加上,要不然报错

class Solution {
public:
    bool judgePoint24(vector<int> nums){
        cout << "这是个引用吗?:"  <<endl;
        for(int i=0 ;i<nums.size();i++){
            nums[i] = 9;
            cout<< nums[i] <<" ";}

//        cout<<endl;

        return judge24({nums.begin(), nums.end()}); }

    static bool judge24(vector<double> nums) {
        auto n = nums.size();
        if(n == 1) return abs(nums[0] - 24) < 1e-10;

        sort(nums.begin(), nums.end());
        // For each permutation,
        do {
            // merge the last two numbers.
            vector<double> temp(nums.begin(), nums.end()-1);
            auto a = nums[n-1], b = nums[n-2];
            for(auto num: {a+b, a-b, a*b, a?b/a:0}){
                // For each merged number, combine with the rest and test it
                temp.back() = num;
                if(judge24(temp)) return true;
            }
        } while(next_permutation(nums.begin(), nums.end()));

        return false;
    }
};

int main(){
    bool a;
    vector<int> nums = {7, 1, 5, 3, 6, 4};

    for(int i=0 ;i<nums.size();i++)
        cout<<nums[i]<<" ";
    cout<<endl;
    Solution s;
    a = s.judgePoint24(nums);
    cout << "Box2 的体积:" << a <<endl;
    for(int j=0 ;j<nums.size();j++){
        cout << "修改后:" << nums[j] <<" ";}
    cout<<endl;

    return 0;
}

缺少了就会报错呀

### C++ LeetCode 题学习路径与最佳实践 #### 了解基础概念 为了高效地在LeetCode题并提升编程技能,掌握C++的基础语法和常用库函数至关重要。这不仅有助于理解题目描述中的技术细节,还能提高编码效率[^1]。 #### 设定合理的起始点 并非所有人都适合从最简单的题目开始。对于有一定经验的学习者而言,可以选择稍微具有挑战性的题目作为起点,比如动态规划入门级问题或是字符串处理类题目。这样可以保持兴趣的同时逐步建立信心。 #### 掌握常见算法模板 针对不同类型的算法设计相应的解法模式非常重要。例如,在解决数组相关的问题时,熟悉双指针、滑动窗口等技巧;面对树形结构,则应熟练运用递归遍历方法。这些通用框架能够帮助快速构思解决方案,并减少思考时间[^2]。 #### 注重代码质量 编写清晰易读且高效的程序同样不可忽视。遵循良好的命名习惯、合理利用STL容器代替手动实现复杂的数据结构、注意边界条件判断等方面都是提高个人能力的关键因素之一。 #### 实践示例:求最后一个单词长度 下面给出了一道关于计算给定字符串中最后一个非空白字符序列(即“单词”)长度的经典面试题解答: ```cpp class Solution { public: int lengthOfLastWord(const string& s) const noexcept { auto it = std::find_if_not(s.rbegin(), s.rend(), ::isspace); if (it == s.rend()) return 0; auto jt = std::find_if(it, s.rend(), ::isspace); return static_cast<int>(std::distance(it, jt)); } }; ``` 此版本采用了标准库算法`std::find_if_not()` 和 `std::find_if()`, 并通过反向迭代器简化逻辑流程,使得整体更加简洁优雅.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值