LeetCode刷题记录(4)-20231219

LeetCode刷题记录
------分割线------
刷题记录4: 22.括号生成



前言

想到什么写什么:

上周参加了华为技术面,面的不太好,大概率挂掉了,心情不佳,故有几日未输出,只能说还是要自己多磨练自己的技术,其实华为问的挺八股的,只能说自己没准备好吧,再接再励,半年后再来。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目内容

在这里插入图片描述

二、自己的思路

	其实这个方法的开头,就是以(开头,拿一个变量统计)可以出现的次数,每出现一个(,变量就+1,每出现一个),变量就-1,然后拿一个变量记录(出现的次数,等于n时,就不再增加,同时用stringbuilder存储对象,每次从上一个方法跳出的时候,需要减掉最新加入的值,其实都是回溯,很简单。

三、自己的代码实现

public static char[] array = {'(',')'};

public static List<String> generateParenthesis(int n) {
    List<String> list = new ArrayList<>();
    StringBuilder str = new StringBuilder("(");
    // )可以出现的次数
    int count = 1;
    // 出现(的次数
    int leftNums = 1;
    addItem(list,str,count,leftNums,n);
    return list;
}

public static void addItem(List<String> list,StringBuilder str,int count,int leftNums,int n){
    if(str.length()==2*n){
        list.add(str.toString());
        return;
    }else if(leftNums==n){
        str.append(array[1]);
        addItem(list,str,count-1,leftNums,n);
        str.deleteCharAt(str.length()-1);
    }else if(count==0){
        str.append(array[0]);
        addItem(list,str,count+1,leftNums+1,n);
        str.deleteCharAt(str.length()-1);
    }else{
        for(int i=0;i<=1;i++){
            str.append(array[i]);
            if(i==0){
                addItem(list,str,count+1,leftNums+1,n);
            }else{
                addItem(list,str,count-1,leftNums,n);
            }
            str.deleteCharAt(str.length()-1);
        }
    }
}

在这里插入图片描述
执行效率还行,就是空间复杂度高了些。

四、精选代码

大佬展示了深度优先遍历和广度优先遍历两种解法,这就偷懒不贴了。我复制测试了一下,时间上并不快,空间也差不多,但是需要吸取的是这两种思想,万变不离其宗,但太晚了,暂时不想看。

总结

上周去上海和4个老友相聚,小酌三篇,意犹未尽,但可能太放松了,以至于华为的技术面面的很糟糕,其实有一半是自己之前有准备的,但不知道为什么在回答的时候就是脑海一片空白,可能还是紧张,所以自己需要在这块上多磨练,希望明年自己能有所突破吧,别浑浑噩噩过日子了,已经混沌的过了2年多了,不思进取的过了8年了,该醒一醒了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值