Accepted very short Java solution. No additional space.
Here accepted solution based on recursion. To save memory I decuded to apply bit mask for every visited cell. Please check board[y][x] ^= 256;\n\n    public boo
Here accepted solution based on recursion. To save memory I decuded to apply bit mask for every visited cell. Please check board[y][x] ^= 256;\n\n    public boolean exist(char[][] board, String word) {\n        char[] w = word.toCharArray();\n        for (int y=0; y<board.length; y++) {\n        \tfor (int x=0; x<board[y].length; x++) {\n        \t\tif (exist(board, y, x, w, 0)) return true;\n        \t}\n        }\n        return false;\n    }\n\t\n\tprivate boolean exist(char[][] board, int y, int x, char[] word, int i) {\n\t\tif (i == word.length) return true;\n\t\tif (y<0 || x<0 || y == board.length || x == board[y].length) return false;\n\t\tif (board[y][x] != word[i]) return false;\n\t\tboard[y][x] ^= 256;\n\t\tboolean exist = exist(board, y, x+1, word, i+1)\n\t\t\t|| exist(board, y, x-1, word, i+1)\n\t\t\t|| exist(board, y+1, x, word, i+1)\n\t\t\t|| exist(board, y-1, x, word, i+1);\n\t\tboard[y][x] ^= 256;\n\t\treturn exist;\n\t}
[]