(1)打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
说明:
用返回一个整数列表来代替打印
n 为正整数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number} n
* @return {number[]}
*/
var printNumbers = function(n) {
var number = 1;
for(i=0;i<n;i++)
{
number=10*number;
}
var b = [];
for(i=1;i<number;i++)
{
b.push(i);
}
return b;
};
题解:
计算出最后一位数应该是10^n-1,
然后再从1-10^n-1依次进行输出。
(2) 返回倒数第 k 个节点
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
注意:本题相对原题稍作改动
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
说明:
给定的 k 保证是有效的。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} k
* @return {number}
*/
var kthToLast = function(head, k) {
var heada = head;
var len=0;
for(i=0;head!=null;i++){
head = head.next;
len++;
}
// return len; //计算出这个链表的长度
for(j=0;j<len-k;j++)
{
heada = heada.next;
}
return heada.val;
};
题解:
实际上我用的还是顺序的方式,因为先计算了单向链表的长度,后来再从首元素开始遍历列表到倒数第k个元素。
别人的方法:
最容易想到的就是双指针方法,右指针先走k步,然后左右指针一起走,直到右指针遇到链表尾,就返回左指针。
var kthToLast = function(head, k) {
// 双指针
var left = head, right = head;
while(k > 0) {
right = right.next;
k–;
}
while(right !== null) {
left = left.next;
right = right.next;
}
return left.val
};
作者:coconilu
链接:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci/solution/shuang-zhi-zhen-he-di-gui-js-by-coconilu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
(3) 统计有序矩阵中的负数(*)
给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。
请你统计并返回 grid 中 负数 的数目。
示例 1:
输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]
输出:8
解释:矩阵中共有 8 个负数。
示例 2:
输入:grid = [[3,2],[1,0]]
输出:0
示例 3:
输入:grid = [[1,-1],[-1,-1]]
输出:3
示例 4:
输入:grid = [[-1]]
输出:1
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 100
-100 <= grid[i][j] <= 100
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-negative-numbers-in-a-sorted-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number[][]} grid
* @return {number}
*/
var countNegatives = function(grid) {
var n = 0;
for(i=0;i<grid.length;i++)
{
for(j=0;j<grid[0].length;j++)
{
if(grid[i][j]<0)
{
n++;}
}
}
return n;
//我的方法还是需要再优化的
//直观思路:只要在每一行遇到了负数,那么从他往后都是负数
};
(4)替换空格(用正则表达式)
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
//使用正则表达式
s1= s.replace(/ /g,'%20');
return s1;
};
(5) 将每个元素替换为右侧最大元素
给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。
完成所有替换操作后,请你返回这个数组。
示例:
输入:arr = [17,18,5,4,6,1]
输出:[18,6,6,6,1,-1]
提示:
1 <= arr.length <= 10^4
1 <= arr[i] <= 10^5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/replace-elements-with-greatest-element-on-right-side
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number[]} arr
* @return {number[]}
*/
var replaceElements = function(arr) {
var b = [];
for(var i=0;i<arr.length-1;i++)
{
var max = arr[i+1];
for(n=0;n<arr.length-i;n++){
if(arr[i+1+n]>max)
{
max = arr[i+1+n];
}
}
b.push(max);
}
b.push(-1);
return b;
};
注解
我的这个方法是个超级笨方法,执行起来总的还是麻烦费时间,所以在这里着重看一下其他大神的题解。
别人的题解
后记:
今天的博客写的好敷衍,太晚了脑子开始罢工,不想思考,后边有机会的话再仔细进行题解的认真分析,不过每天都定下一点目标总是好的,不至于无所事事。