只是为了记录每天的练习(要好好加油啊呜呜呜现在的我还太拉了
思路很直接啊……就是转进制+数字转字符串。
class Solution {
public:
string convertToBase7(int num) {
if(num == 0) //特殊情况
return "0";
const int system = 7;//使其普遍适用于n进制
bool flag;//记录num的正负性
flag = num > 0 ? true : false;
string str;
num = abs(num);//直接取绝对值运算
while(num > 0)
{
str.append(1,num%system + '0');//append接收的是字符串或n个字符
num /= 7;
}
if(!flag)
str.push_back('-');
reverse(str.begin(),str.end());//交换顺序
return str;
}
};
注意一下append的用法
str.append(num%system + '0');←如果是这么写就报错了
数字转字符串或者字符串转数字都要主要ASCII码的加减。。
题目
给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。
示例及提示
示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
思路
首先,平衡二叉搜索树是一种结构平衡的二叉搜索树,即叶节点高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树(二叉搜索树定义:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值)。又名:二叉排序树,二叉查找树
其实思路也不困难,因为是有序数组,所以每次找出数组中的中点作为根结点就好,再将中点划分的前半边数组作为左子树递归使用,右边同理。注意递归的终止条件。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* createTree(vector<int>& nums,int left,int right)
{
if(left > right)
return nullptr;
int mid = (left+right)/2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = createTree(nums,left,mid-1);
root->right = createTree(nums,mid+1,right);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
return createTree(nums,0,nums.size()-1);
}
};
标注一下代码过程遇到的问题:
1.nullptr是c++中空指针的关键字。
2.看到题解中有人是这么写的:
auto ptr = new TreeNode(nums[mid]); //填充根节点
注意auto关键字。auto的原理就是根据后面的值,来自己推测前面的类型是什么。且用auto声明的变量必须初始化。
3.c++的构造函数用法。