1.Algorithm
暴力法
public List<String> letterCombinations(String digits) {
HashMap<Character,String> hm = this.generateMap();
ArrayList<String> res = new ArrayList<String>();
for(int i=0;i<digits.length();i++) {
String temp = hm.get(digits.charAt(i));
res=helper(temp, res);
}
System.out.println(res);
return res;
}
public ArrayList<String> helper(String temp, ArrayList<String> arr) {
ArrayList<String> temparr = new ArrayList<String>();
if (arr.size()==0) {
for(int i=0;i<temp.length();i++)
temparr.add(temp.charAt(i)+"");
}else {
for(int j=0;j<arr.size();j++) {
for(int i=0;i<temp.length();i++) {
temparr.add(arr.get(j)+temp.charAt(i));
}
}
}
return temparr;
}
public HashMap<Character,String> generateMap(){
HashMap<Character,String> hm = new HashMap<Character, String>();
hm.put('2', "abc");
hm.put('3', "def");
hm.put('4', "ghi");
hm.put('5', "jkl");
hm.put('6', "mno");
hm.put('7', "pqrs");
hm.put('8', "tuv");
hm.put('9', "wxyz");
return hm;
}
2.Review
Data Structure - Doubly Linked List
双向链表是链表的一种变体,与单链表相比,双向链表有两种导航方式,向前和向后导航都很容易。下面是理解双链表概念的重要术语。
- 链接 - 链表中的每个链接都可以存储数据称为元素。
- Next - 链表中的每个链接都包含一个链接指向到下一个链接称为Next。
- Prev - 链表中的每个链接都包含一个链接指向到上一个链接称为Prev。
- LinkedList - 链表包含到连接到第一个的链接称为First和链接到最后一个的链接称为Last。
双端链表表现形式
根据上面的说明,以下是需要考虑的要点。
双重链接列表包含一个名为first和last的链接元素。
- 每个链接携带一个数据字段和两个称为next和prev的链接字段。
- 每个链接都使用下一个链接与下一个链接链接。
- 每个链接都使用它的前一个链接链接到它的前一个链接。
- 最后一个链接的链接为null,用于标记列表的结束。
基本操作
下面是链表支持的基本操作。
- 插入-在链表的头部添加一个元素。
- 删除-删除链表头部的元素。
- 尾部插入-在链表的末尾添加一个元素。
- 删除尾部-删除链表末尾的元素。
- 指定插入-在链表中指定item的后面添加一个元素。
- 删除-使用键从链表中删除元素。
- 前向遍历-以前向遍历的方式显示完整的链表。
- 向后显示—以向后的方式显示整个列表。
插入操作
下面的代码演示了在双端链表头部的插入操作。
示例:
//insert link at the first location
void insertFirst(int key, int data) {
//create a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
if(isEmpty()) {
//make it the last link
last = link;
} else {
//update first prev link
head->prev = link;
}
//point it to old first link
link->next = head;
//point first to new first link
head = link;
}
删除操作
下面的代码演示了在双端链表头部的删除操作。
示例:
//delete first item
struct node* deleteFirst() {
//save reference to first link
struct node *tempLink = head;
//if only one link
if(head->next == NULL) {
last = NULL;
} else {
head->next->prev = NULL;
}
head = head->next;
//return the deleted link
return tempLink;
}
尾部插入操作
下面的代码演示了在双端链表的最后位置上的插入操作。
示例:
//insert link at the last location
void insertLast(int key, int data) {
//create a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
if(isEmpty()) {
//make it the last link
last = link;
} else {
//make link a new last link
last->next = link;
//mark old last node as prev of new link
link->prev = last;
}
//point last to new last node
last = link;
}
查看C语言的实现, 请 点击这里.
3.Tips
本周重新回顾归纳法
- 归纳法是培根在新工具里面提出,它是一种由个别到一般的推理。
- 人们在解释一个较大事物时,从个别、特殊的事物总结、概括出各种各样的带有一般性的原理或原则,然后才可能从这些原理、原则出发,再得出关于个别事物的结论。
- 归纳推理要求大前提,小前提必须为真。
- 正如恩格斯所说:“归纳和演绎,正如分析和综合一样,是必然相互联系着的。不应当牺牲一个而把另一个捧到天上去,应当把每一个都用到该用的地方,而要做到这一点,就只有注意它们的相互联系,它们的相互补充。“
- 归纳法分完全归纳法和不完全归纳法。
- 归纳法可以理解为对某一现象的逻辑和规律描述。
- 它属于统计学里面的一种。
4.Share
本周分享营销理论4P
- 营销,指企业发现或发掘准消费者需求,让消费者了解该产品进而购买该产品的过程。
- 让产品到消费者手上通常需要经历几个阶段的工作,每个阶段是相互作用,就好比软件开发:从用户需求到产品成型中间会有需求分析、需求确认、系统设计、编码开发,系统测试,发布上线 等一系列的阶段。
- 营销的4P理论定义让产品到消费者手上的需要经历的阶段和每个阶段需要做的事情。
- 营销的唯一正确理论就是4P-产品、价格、渠道、推广、它创造了营销思考谋划的完整闭环。
- 4P是营销的全部和全部的营销,只要是讨论4P问题,一定是产品、价格、渠道、推广,四个要素一个都不能少。
感想:
世界是有规律的,各行各业的工作都有各自的规律或者是窍门,当你遇到一个问题时,不建议使用在其他领域的认知经验去解决,这样的解决方式不全面,建议搜索行业的方法或者请教专业人士。近期面临产品销售的问题,自己也思考了一些销售措施出来,在接触4P理论之后,就明显觉得自己之前思考的措施不系统,很零碎,要相信你遇到的大部分问题,肯定有其他人也遇到过并且总结了一套方法。