LeetCode0017

  • 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
  • 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

  • 示例:
  • 输入:"23"
  • 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function (digits) {
let result = [];
if (digits && digits.length > 0) {
let letterMap = [
"",//0
"",//1
"abc",//2
"def",//3
"ghi",//4
"jkl",//5
"mno",//6
"pqrs",//7
"tuv",//8
"wxyz"//9
]
for (let c of digits) {
let digit = c - '0';
if (digit === 0 || digit === 1) continue;
let letter = letterMap[digit];
if (result.length === 0) result = letter.split('');
else {
let arr = result.concat();
result = [];
for (let l of letter) {
for (let i = 0, lens = arr.length; i < lens; i++) {
result.push(arr[i] + l);
} }
}
}
}
return result;
}; console.log(letterCombinations("23"));

LeetCode0018

  • 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

  • 例如:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

  • 满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]

思路

  • 套用求三数和的思路,对于nums[0...n-3],求出一个threeSum(nums[1...n-1], target-nums[0...n-3])的值。

  • 剩下的写法就跟求threeSum一致了,需要注意的是每个位置的去重处理。

/**
* @param {number[]} nums
* @param {number} target
* @return {number[][]}
*/
var fourSum = function (nums, target) {
if (nums === undefined) return [];
let lens = nums.length;
if (lens < 4) return [];
let first = 0, second, head, tail;
let result = [];
nums.sort((a, b) => a - b);
//console.log(nums);
while (first < lens - 3) {
second = first + 1;
while (second < lens - 2) {
head = second + 1;
tail = lens - 1;
while (head < tail) {
let sum = nums[first] + nums[second] + nums[head] + nums[tail];
if (sum === target) {
result.push([nums[first], nums[second], nums[head], nums[tail]]);
while (nums[head] === nums[head + 1])++head;
while (nums[tail] === nums[tail - 1])--tail;
head++;
tail--;
} else if (sum > target) {
tail--;
}
else {
head++;
}
}
second++;
while (nums[second] === nums[second - 1]) second++;
}
first++;
while (nums[first] === nums[first - 1]) first++;
}
return result;
}; console.log(fourSum([1, 0, -1, 0, -2, 2], 0));
// console.log(fourSum([-3, -2, -1, 0, 0, 1, 2, 3], 0));
// console.log(fourSum([1, 0, -1, 0, -2, 2], 0));

最新文章

  1. Python简单爬虫入门二
  2. Child &lt;- many-to-one -&gt;Parent
  3. 程序员下一门要学的编程语言Swift
  4. DP大作战—组合背包
  5. python中将字符串转化为本地变量
  6. 机器学习之逻辑回归(Logistic Regression)
  7. Jquery 弹出提示框输入插件 apprise 修改中文按钮以及使用说明
  8. bzoj 3823: 定情信物 线性筛逆元
  9. 关于Kingfisher--备用
  10. [转]SSL协议与数字证书原理
  11. mysql安装报错
  12. BOM,DOM常见操作和DHML
  13. 原生js实现 五子棋
  14. 2017-12-18python全栈9期第三天第一节之昨天内容回顾与作业讲解用户三次机会再试试
  15. APDL link180单元
  16. java-保留x个小数位
  17. Redis 通信协议简单研究
  18. mysql查看和修改注释
  19. 团队NABCD
  20. [leetcode DP]120. Triangle

热门文章

  1. 【PS学习成果】手持雷电
  2. struct stat
  3. ElasticSearch使用小结
  4. 浅谈对RabbitMQ的认识
  5. java.sql.BatchUpdateException: ORA-01691: Lob 段 CSASSSMBI.SYS_LOB0000076987C00003$$ 无法通过 128 (在表空间 HRDL_CSASS 中) 扩展
  6. Linux 下载安装
  7. Salt常用命令二
  8. 使用tcpdump查看HTTP请求响应 详细信息 数据
  9. 如何选字体(font-family)
  10. goweb- session和数据存储