リベート(LeetCode)問題解(JavaScriptを使用)【4】

14283 ワード

(1)1から最大までのn桁の印刷
数字nを入力して、1から最大までのnビット10進数を順次印刷します.たとえば3を入力すると、最大3桁999まで1、2、3が印刷されます.
例1:入力:n=1出力:[1,2,3,4,5,6,7,8,9]は、印刷nの代わりに1つの整数リストを返すことで正の整数となることを示している.
ソース:スナップリンク: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保証が有効であることを示しています.
ソース:スナップリンク: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(light!==null){left.next;right=right=Right.next;
著者:coconiluリンク:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci/solution/shuang-zhi-zhen-he-di-gui-js-by-coconilu/著作権は著作者の所有になります.商業転載は作者に連絡して授権を獲得してください.商業転載ではないので、出典を明記してください.
(3)統計秩序行列における負の数(*)
m*nの行列gridをあげます.行列の要素は行によっても列によっても、インクリメントされない順に並べられます.
gridの負の数を統計して返してください.
例1:
入力:grid=[[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-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]==100
ソース:スナップリンク: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%20 are%20 happy."
制限:
0<=sの長さ<=10000
ソース:スナップリンク: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
ソース:スナップリンク: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;
};
私のこの方法は超愚かな方法です.実行するには総じて時間がかかります.ここで他の大神の問題点を見てみます.他人の問題
後記:今日のブログはいい加減に書きました.遅すぎて頭がストになりました.考えたくないです.後に機会があれば、丁寧に分析してみます.でも、毎日目標を決めます.