掘金.多米诺骨牌均衡状态(简单04)

import java.util.Arrays;
import java.util.StringJoiner;

    public static String solution(int num, String data) {

        int []arrL = new int[num];
        int []arrR = new int[num];
        int []arrResult = new int[num];
        int l = 1;int pointl = 0;
        int r = -1;int pointr = 0;

        for (int i = num-1; i >= 0; i--) {
            if( data.charAt(i) == 'L'){
                pointl = 1;l = 1;
            }else if (data.charAt(i) == 'R'){
                pointl = 0;l = 1;
            }
            if(pointl == 1){
                arrL[i] = l++;
            }else arrL[i] = 0;
        }


        for (int i = 0; i < num; i++) {
            if( data.charAt(i) == 'R'){
                pointr = 1;r = -1;
            }else if (data.charAt(i) == 'L'){
                pointr = 0;r = -1;
            }
            if(pointr == 1){
                arrR[i] = r--;
            }else arrR[i] = 0;
        }

        int index =0;
        var result = new StringJoiner(",", ":", "");
        for (int i = 0; i < num; i++) {
            arrResult[i] = arrL[i] + arrR[i];
            if(arrResult[i] == 0){
                index++;
                result.add((i+1) + "");
            }
        }

        System.out.println("arrL" + Arrays.toString(arrL));
        System.out.println("arrR" + Arrays.toString(arrR));
        System.out.println("Result" + Arrays.toString(arrResult));
        System.out.println(index + result.toString());

        if(index == 0)return "0";
        else return index + result.toString();
    }
}

 思路如下:

以{.L.R...LR..L..}为例子

1.创建三个整形数组,

第一个数组arrL表示L对整个数列的影响

第二个数组arrR表示R对整个数列的影响

第三个数组表示结果

2.arrL从右向左遍历,遇到L置为1,随后以此增加,遇到R重置

即arrL[2, 1, 0, 0, 4, 3, 2, 1, 0, 3, 2, 1, 0, 0]

3.arrR从左向右遍历,遇到R置为-1,随后以此反向增加,遇到L重置

即arrR[0, 0, 0, -1, -2, -3, -4, 0, -1, -2, -3, 0, 0, 0]

4.两数组相加得到结果

Result[2, 1, 0, -1, 2, 0, -2, 1, -1, 1, -1, 1, 0, 0]

其中,

>0表示左偏

<0表示右偏

=0表示直立

5.使用StringJoiner按照题目要求拼接返回就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值