字典树
Given an array nums
of n integers where n > 1, return an array output
such that output[i]
is equal to the product of all the elements of nums
except nums[i]
.
Example:
Input: [1,2,3,4]
Output: [24,12,8,6]
Note: Please solve it without division and in O(n).
Follow up:
Could you solve it with constant space complexity? (The output array does not count as extra space for the purpose of space complexity analysis.)
class TriNode
{
public:
bool isword;
//char value;
map<char,TriNode*> child;
TriNode()
{
isword=false;
}
};
class Trie {
private:
TriNode *root;
public:
/** Initialize your data structure here. */
Trie()
{
root=new TriNode();
}
/** Inserts a word into the trie. */
void insert(string word)
{
TriNode *temp=root;
for(auto x:word)
{
if(temp->child.find(x)==temp->child.end())//这个字母没有 插进去
{
temp->child[x]=new TriNode();//新建一个节点
temp=temp->child[x];
}
else
{
temp=temp->child[x];
}
}
temp->isword=true;
}
/** Returns if the word is in the trie. */
bool search(string word)
{
TriNode *temp=root;
for(auto x:word)
{
if(temp->child.find(x)==temp->child.end())
{
return false;
}
else
{
temp=temp->child[x];
}
}
if(temp->isword==true)
{
return true;
}
return false;
}
/** Returns if there is any word in the trie that starts with the given prefix. */
bool startsWith(string prefix) {
TriNode *temp=root;
for(auto x:prefix)
{
if(temp->child.find(x)==temp->child.end())
{
return false;
}
else
{
temp=temp->child[x];
}
}
return true;
}
};
/**
* Your Trie object will be instantiated and called as such:
* Trie obj = new Trie();
* obj.insert(word);
* bool param_2 = obj.search(word);
* bool param_3 = obj.startsWith(prefix);
*/