Java two arrays solution


  • 0
    D
    public class Solution {
        public int magicalString(int n) {
            List<Integer> str1 = new ArrayList<>();
            int p1 = -1;
            List<Integer> str2 = new ArrayList<>();
            int p2 = -1;
            boolean one = true;
            while (p1 < n) {
                if (one) {
                    set(str1, (p1++) + 1, 1);
                    set(str2, (p2++) + 1, 1);
                    if (!valid(str1, str2)) {
                        p1--;
                        p2--;
                        set(str1, (p1++) + 1, 1);
                        set(str1, (p1++) + 1, 1);
                        set(str2, (p2++) + 1, 2);
                    }
                } else {
                    set(str1, (p1++) + 1, 2);
                    set(str2, (p2++) + 1, 1);
                    if (!valid(str1, str2)) {
                        p1--;
                        p2--;
                        set(str1, (p1++) + 1, 2);
                        set(str1, (p1++) + 1, 2);
                        set(str2, (p2++) + 1, 2);
                    }
                }
                one = !one;
            }
            int ones = 0;
            for (int i = 0; i < n; i++) {
                ones += str1.get(i) == 1 ? 1 : 0;
            }
            return ones;
        }
    
        private boolean valid(List<Integer> str1, List<Integer> str2) {
            return str1.get(str2.size() - 1) == str2.get(str2.size() - 1);
        }
    
        private void set(List<Integer> str, int index, int val) {
            if (index >= str.size()) {
                str.add(val);
            } else {
                str.set(index, val);
            }
        }
    }
    

Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.