、ヘッド・ポインタ・リストと順に削除するノードのノード値を削除する関数を定義します。
ヘッドノードリストのリターンを削除した後。
注:この質問元のタイトルと比べて変化があります
例1:
入力:ヘッド= [4,5,1,9]、ヴァル = 5
[4,1,9]:出力
値が2番目のノード5が与えられ、その後、あなたの関数を呼び出すあなたはリストの後に:辞書リスト株4 - > 1 - > 9
例2:
入力:ヘッド= [4,5,1,9]、ヴァル = 1つの
出力:[4,5,9]
リストの与えられた値1の後にあなたが第3のノード、そしてあなたの関数を呼び出す:辞書リスト株4 - > 5 - > 9。
説明:
トピックのリスト内のノードが互いにその値の異なる保証するために、
CまたはC ++言語を使用している場合は、あなたが削除され、無料または削除ノードにする必要はありません
アイデア:最初のノードへの注意を払う、偽のノードを作成するには、問題を解決するための一般的な方法です。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteNode(ListNode head, int val) {
ListNode temp=new ListNode(-1);
temp.next=head;
for(ListNode i=temp;i.next!=null;i=i.next){
if(i.next.val==val){
i.next=i.next.next;
break;
}
}
return temp.next;
}
}
備えるに表現の「*「」及びn」と一致する機能を実装します。モード文字が「」 『*』任意の1つの文字を表し前の文字が(0時間を含む)任意の回数現れることができることを示しています。この問題では、試合全体のパターンが文字列のすべての文字に一致しています。たとえば、文字列「AAA」モードと「AA」と「AB * AC *」試合が、「aa.a」と「abが*」一致しません。
例1:
入力:
S = "AA"
P = "A"
出力:偽
の解釈: ""文字列全体"AA"に一致することはできません。
例2:
入力:
S =「AA」
P =「A *」
出力:真の
説明:「*」マッチ「」は複数の要素は、この要素の前にあること、ゼロまたは上記の代表です。したがって、文字列は「AA」「」回繰り返されるとみなすことができます。
例3:
入力:
S = "AB&"
Pは= "*。"
出力:真の
説明: "*"は任意の文字の意味はゼロまたはそれ以上のマッチを( '*')( '')。
例4:
入力:
S = "AAB"
P = "C * A * B"
出力:真の
説明: 'C'が0である場合'*'手段''は一度繰り返され、さらに、ゼロまたはので。だから、文字列「AAB」を一致させることができます。
例5:
入力:
S = "ミシシッピ"
"MIS * * P * IS" P =
出力:falseに
Sは空であり、そして小文字のみからAZ。
pは*空であるとAZ、および文字。とから、小文字のみが含まれていてもよいです。
アイデア:文字列DP、慎重にタイトルを読むために注意を払います。
class Solution {
public boolean isMatch(String s,String p){
if (s == null || p == null)return false;
int sLen=s.length();
int pLen=p.length();
boolean[][] dp = new boolean[sLen + 1][pLen + 1];
dp[0][0] = true;//dp[i][j] 表示 s 的前 i 个是否能被 p 的前 j 个匹配
for (int i = 0; i < pLen; i++) { // here's the p's length, not s's
dp[0][i + 1] = p.charAt(i) == '*' && dp[0][i - 1];
}
for (int i = 0; i < sLen; i++) {
for (int j = 0; j < pLen; j++) {
//单个字符可以匹配
if (p.charAt(j) == '.' || p.charAt(j) == s.charAt(i)) dp[i + 1][j + 1] = dp[i][j];
//多个字符
if (p.charAt(j) == '*') {
dp[i+1][j+1]=dp[i+1][j-1] ||
(dp[i+1][j] && (s.charAt(i)==p.charAt(j-1) || p.charAt(j-1)=='.')) ||
(dp[i][j+1] && (s.charAt(i)==p.charAt(j-1) || p.charAt(j-1)=='.'));
}
}
}
return dp[sLen][pLen];
}
}
文字列が(整数および端数を含む)の値を表しているかどうかを決定するために使用される機能を実現します。例えば、文字列 "100"、 "5E2"、 " - 123"、 "3.1416"、 "0123" および "-1E-16" を示す値が、 "12E"、 "1a3.14"、「1.2。 3 "" + --5 "と" 12E + 5.4「もありません。
アイデア1:トライキャッチ
class Solution {
public boolean isNumber(String s) {
try {
if (s.endsWith("f") || s.endsWith("F")
|| s.endsWith("D") || s.endsWith("d")) {
return false;
}
Double.valueOf(s);
return true;
} catch (Exception exception) {
return false;
}
}
}
アイデア2:通常の
class Solution:
def isNumber(self, s: str) -> bool:
return bool(re.match(r' *[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)(e[+-]?[0-9]+)? *$', s))
アレイの前半分の奇数部分の全て、全ての偶数アレイの第2の半分に位置するように、アレイ内の数字の順序を調整する機能を実現するために、整数の配列を入力します。
例:
入力:NUMS = [1,2,3,4]
出力:[1,3,2,4-]
注:[3,1,2,4]は1つの正解です。
ヒント:
1 <= nums.length <= 50000
1 <= NUMS [I] <= 10000
アイデア:クイックドレンと同様の旅行partation
class Solution {
public int[] exchange(int[] nums) {
int i = 0, j = nums.length - 1, tmp;
while(i < j) {
while(i < j && (nums[i] & 1) == 1) i++;
while(i < j && (nums[j] & 1) == 0) j--;
tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
return nums;
}
}