思路:
两个方法:
栈和递归。两个都啃一下吧。
栈:栈的方法主要注意细节,现在不是很理解递归怎么做的,先写一下递归的吧。
代码:
先留着。
递归:
代码:
是我忘记之前dfs的递归怎么写的了,回溯那一块全是用的递归,用递归需要很注意传入当前处理字符的位置这个参数!
注意这里index应该要用引用传递,才能保证index能实时传递。
class Solution {
public:
string decode(string &s,int & index)
{
string result;
int n=s.size();
while(index<n&&s[index]!=']')//遇到']'就结束递归
{
if(isdigit(s[index]))
{
int count=0;//记录数字
while(isdigit(s[index]))
{
count=count*10+(s[index++]-'0');
}
index++;//跳过'['
//开始递归
string s1=decode(s,index);
index++;//跳过']'
for(int i=0;i<count;i++)
{
result+=s1;
}
}
else result+=s[index++];
}
return result;
}
string decodeString(string s) {
int index=0;
return decode(s,index);
}
};
在这里复习一下引用和指针的区别:
都用于间接访问变量。
引用是某个变量的别名,一旦引用被初始化后,不能再改变引用到其他变量。
指针是一个变量,它存储了另一个变量的内存地址。指针可以在程序的执行过程中指向不同的变量。
使用场景也是面试问到了我的。好好背一下。
引用通常用于函数参数传递(传引用),或者返回值的传递,保证函数内部对参数的修改会影响到实参。
指针常用于动态内存分配、数据结构(如链表、树)的实现,以及需要在运行时灵活操作内存的场合。