Java Solution easy to understand.
At first, \n0+0=1, 1+0=1, 1+1=110.\nSo you have to calculate with carry over 11.\n11+0+0=11, 11+0+1=0, 11+1+1=1.\nThen you have to  to calculate with carry over
At first, \n0+0=1, 1+0=1, 1+1=110.\nSo you have to calculate with carry over 11.\n11+0+0=11, 11+0+1=0, 11+1+1=1.\nThen you have to  to calculate with carry over 1.\n1+0+0=1, 1+0+1=110, 1+1+1 = 111.\nThat\'s all you have to calculate and these are implemented in add.\n```\nclass Solution {\n    public void add(int[] r, int b){ //r.length == 3\n        r[2] += b;\n        if(r[2]>1){\n            r[2] = 0;\n            if(r[1]==1){\n                r[1] = 0;\n            } else {\n                r[0] = 1;\n                r[1] = 1;\n            }\n        } \n    }\n    public int[] addNegabinary(int[] arr1, int[] arr2) {\n        List<Integer> ret = new ArrayList<>();\n        int[] w = new int[3];\n        for(int i = 0; i < arr1.length || i < arr2.length; i ++){\n            if(i < arr1.length){ \n                add(w, arr1[arr1.length - 1 - i]);\n            }\n            if(i < arr2.length){                         \n\t\t\t\tadd(w, arr2[arr2.length - 1 - i]);\n            }\n            ret.add(w[2]);\n            w[2] = w[1];\n            w[1] = w[0];\n            w[0] = 0;\n            \n        }\n        if(w[2]>0 || w[1]>0){\n            ret.add(w[2]);\n            if(w[1]>0){ret.add(w[2]);}\n        } \n        while(ret.get(ret.size() - 1 ) == 0 && ret.size()>1){\n            ret.remove(ret.size() - 1);\n        }\n        int[] reta= new int[ret.size()];\n        for(int i = 0; i < ret.size(); i ++){\n            reta[i] = ret.get(ret.size()-1-i);\n        }\n        return reta;\n    }\n}\n```
['Java']