C/C++每日一练(20230305)
创始人
2024-05-29 07:24:30

目录

1. 整数分解  ☆

2. 二叉树的最小深度 ★★

3. 找x ★★


1. 整数分解

输入一个正整数,将其按7进制位分解为各乘式的累加和。

示例 1:

输入:49
输出:49=7^2

示例 2:

输入:720
输出:720=6*7^0+4*7^1+2*7^3

代码:

#include
#define X 7int main()
{int i = 0;int mod, num;scanf("%d", &num);printf("%d=", num);while(num){mod = num % X;num /= X;if(mod > 0)printf("%d*7^%d%c", mod, i, num > 0 ? '+' : '\n');i++;}return 0;
}

输入输出:

720
720=6*7^0+4*7^1+2*7^3


2. 二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

提示:

  • 树中节点数的范围在 [0, 105] 内
  • -1000 <= Node.val <= 1000

代码:

#include 
#define null INT_MIN
using namespace std;struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};class Solution
{
public:int minDepth(TreeNode *root){if (!root)return 0;int left = minDepth(root->left);int right = minDepth(root->right);return (left && right) ? 1 + min(left, right) : 1 + left + right;}
};TreeNode* buildTree(vector& nums)
{TreeNode *root = new TreeNode(nums[0]);queue q;q.push(root);int i = 1;while(!q.empty() && i < nums.size()){TreeNode *cur = q.front();q.pop();if(nums[i] != null){cur->left = new TreeNode(nums[i]);q.push(cur->left);}i++;if(i < nums.size() && nums[i] != null){cur->right = new TreeNode(nums[i]);q.push(cur->right);}i++;}return root;
}int main()
{Solution s;vector root = {3,9,20,null,null,15,7};TreeNode* tree = buildTree(root);cout << s.minDepth(tree) << endl;root = {2,null,3,null,4,null,5,null,6};tree = buildTree(root);cout << s.minDepth(tree) << endl;return 0;
} 

输出:

2
5


3. 找x

题目描述

输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。

输入

测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。

输出

对于每组输入,请输出结果。

样例输入

4
1 2 3 4
3

样例输出

2

代码:

#include 
using namespace std;
int main()
{int n = 0;cin >> n;int *ptr = new (nothrow) int[n];for (auto i = 0; i < n; i++){cin >> ptr[i];}int x = 0;cin >> x;auto j = 0;auto status = 0;for (; j < n; ++j){if (ptr[j] == x){status = 1;break;}}if (status == 0){j = -1;}cout << j << endl;delete[] ptr;cin.get();cin.get();return 0;
}

输入输出:

4
1 2 3 4
3
2


附录

二叉树的序列化与反序列化

class Codec
{
public:
    string serialize(TreeNode *root)
    {
        string result = "[";
        queue myQue;
        myQue.push(root);
        while (!myQue.empty())
        {
            root = myQue.front();
            myQue.pop();
            if (root == NULL)
            {
                result += "null,";
                continue;
            }
            else
            {
                result += to_string(root->val) + ",";
                myQue.push(root->left);
                myQue.push(root->right);
            }
        }
        if (result == "[null,")
        {
            result.resize(result.size() - 1);
        }
        else
        {
            int endIndex = result.size() - 1;
            while (result[endIndex] < '0' || result[endIndex] > '9')
            {
                endIndex -= 1;
            }
            result.resize(endIndex + 1);
        }
        result += "]";
        return result;
    }
    TreeNode *deserialize(string data)
    {
        vector dataVec;
        int dataSize = data.size();
        for (int index = 1; index < dataSize - 1; ++index)
        {
            string tempData = "";
            while (index < dataSize - 1 && data[index] != ',')
            {
                tempData += data[index++];
            }
            dataVec.push_back(tempData);
        }
        int dataVecSize = dataVec.size();
        queue myQue;
        if (dataVec[0] == "null")
        {
            return NULL;
        }
        TreeNode *result = new TreeNode(atoi(dataVec[0].c_str())), *tempPtr;
        myQue.push(result);
        for (int index = 1; index < dataVecSize; ++index)
        {
            tempPtr = myQue.front();
            myQue.pop();
            if (dataVec[index] != "null")
            {
                tempPtr->left = new TreeNode(atoi(dataVec[index].c_str()));
                myQue.push(tempPtr->left);
            }
            index += 1;
            if (index < dataVecSize && dataVec[index] != "null")
            {
                tempPtr->right = new TreeNode(atoi(dataVec[index].c_str()));
                myQue.push(tempPtr->right);
            }
        }
        return result;
    }
};


🌟 每日一练刷题专栏

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

 收藏,你的青睐是我努力的方向! 

✏️ 评论,你的意见是我进步的财富!  

C/C++每日一练 专栏

Python每日一练 专栏


相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...