LeetCode——481.神奇字符串

通过万岁!!!

  • 题目:就是给你一个数n,然后让你构建一个长度为n的字符串,并且计算其中1的个数,这个字符串只有1和2组成。构建规则是遍历自己,如果遇到1,那么就对自己加一个值,如果遇到2,就对自己加两个值,而具体加的值是如果之前加的字符是1,那么本次加字符是2,否则本次加的字符是1。
  • 思路:其实,其实我上面讲述这个题的时候,就已经说了大致的思路,原题中给的比较绕。这里需要注意初始化,如果我们只对s初始化为1或者12是不够的,所以要初始化为122。
  • 技巧:字符串构建、遍历

java代码

class Solution {
    public int magicalString(int n) {
        StringBuilder sb = new StringBuilder();
        sb.append(122);
        int ans = 1;
        int i = 2;
        boolean isOne = true;// 加的是不是1
        while (sb.length() < n) {
            if (sb.charAt(i) == '1') {// i指向的是1,
                if (isOne) {// 需要加1
                    sb.append(1);
                    ans++;
                } else {
                    sb.append(2);
                }
            } else {// i指向的2
                if (isOne) {
                    sb.append(1);// 追加第一个1
                    ans++;
                    if (sb.length() >= n) {
                        break;
                    }
                    sb.append(1);// 追加第二个1
                    ans++;
                } else {
                    sb.append(2);
                    if (sb.length() >= n) {
                        break;
                    }
                    sb.append(2);
                }
            }
            isOne = !isOne;
            i++;
        }
        return ans;
    }
}
  • 总结:题目还是有点绕的,而且我用的if判断较多,感觉应该是一个比较笨的方法了。通过万岁了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值