Listing all possible names from a phone number
Without the link, I can only make certain assumptions, so I am going to give a couple of global comments:


When checking if something is contained in a dictionary, you each time read the file again. Second, you can linearly through it in order to determine if a name is contained in it or not. This is very, very slow. Is this because you have some memory constraints? Because else, it would be much faster to read it at the start, and use a HashSet to check for existence.
Should you be able to read the whole file in memory, perhaps you could even create a mapping between the names and the key combinations that make up this name, by precalculating this. I think that would be a rather optimal solution?
genPermutations does not work. You pass a depth, which is basically a key index, and generate all permutations from that key until the final key. If you nevertheless keep and fix the genPermutations method, you have another point which can be improved. As I commented earlier, if you would look at the generated results, you could notice a lot of duplication. Take your 4734 example, which among other things generates GPDG, HPDGand IPDG. The three strings are equal except for the first letter. This means you are calculating a lot of the same things. This could be cached.


Some minor remarks:


Class names should be uppercase (or better, CamelCase), e.g. NameNum
Variables should start with a lowercase, so List&lt;List&lt;Character&gt;&gt; lists = new ArrayList&lt;&gt;();
Do not use reference equality with Strings, instead use the equals method. You might get unexpected results otherwise.