第一次发布一个问题,对我来说很裸露。
因此,相当一段时间以前,我经历了一次面试过程,陷入了一个技术问题。解决的问题在下面给出了hash方法,并编写了相应的unhash方法。
static Int64 hashThis (String s)
{
Int64 h = 7;
String letters = "acdegiklmnoprsuw";
for (Int32 i = 0; i < s.Length; i++)
{
h = (h * 37 + letters.IndexOf(s[i]));
}
return h;
}
到目前为止,我失败的进展是:
static String unhashThis(Int64 integer)
{
Int64 h = 7;
String letters = "acdegiklmnoprsuw";
String unhashed = "";
// as long as h < than integer passed in
// this is so we iterate the correct number of times
for (Int32 i = 0; h < integer; i++)
{
h = (h * 37 + letters.IndexOf(letters[i]));
Int64 rem = h % 7;
Int64 rem2 = 7 % h;
//unhashed += letters[(int)h];
//if (h > letters.Length)
//{
// // loop through the letters to find the character
// for (int j = 0; j < h; j++)
// {
// if (j == letters.Length)
// {
// j = 0;
// }
// else
// {
// unhashed += letters[j];
// }
// }
//}
}
return unhashed;
仅重申一下,我正在重新审视这个问题,因为我正努力提高解决问题的能力,以便在以后的采访中做得更好。
非常感谢。
这有效:
static String unHashThis(Int64 hash)
{
String letters = "acdegiklmnoprsuw";
String phrase = "";
while (hash >= 7 * 37)
{
int i = (int)(hash % 37);
phrase = letters[i]+phrase;
hash = (hash - hash % 37) / 37;
}
return phrase;
}